文本和二进制流

文本流包含一个或多个文本行,这些文本行可写入到面向文本的显示器中以供读取。 当它从文本流中读取时,程序会在每行末尾读取一个换行符。 当它写入文本流时,程序会写入一个换行符来表示行的结束。 为了在目标环境中匹配不同的约定来表示文件中的文本,库函数可以更改在程序和文本流之间传输的字符的数量和表示。

在文本流中定位是受限的。 可以通过调用 fgetposftell 获取当前文件位置指示符。 可以将文本流定位到通过这种方式获取的位置,或者通过调用 fsetposfseek,定位到文本流的开头或结尾。 可能无法很好地支持任何其他位置更改。

为获得最大的可移植,程序不应写入:

  • 空文件。
  • 行尾的空白字符。
  • 部分行(通过省略文件末尾的换行符)。
  • 除可打印字符、换行符和水平制表符之外的字符。

如果遵循这些规则,从文本流中读取的字符序列(无论是作为字节还是多字节字符)将与写入的字符序列相匹配。 否则,如果您创建的文件在关闭时是空的,则库函数可以删除该文件。 或者库函数也可更改或删除写入到该文件的字符。

二进制流包含一个或多个字节的任意信息。 您可将存储在任意对象中的值写入到一个(面向字节的)二进制流,并读取您在编写二进制流时存储在该对象中的完全相同的内容。 库函数不会更改你在程序和二进制流之间传输的字节。 然而,库函数可以将任意数量的 NULL 字节追加到您使用二进制流编写的文件。 程序必须在二进制流的末尾处理这些额外的 NULL 字节。

二进制流内的定位可以明确地进行定义,但相对于流的末尾的定位除外。 与文本流相似,可获取和更改当前的文件定位指示符。 由 ftellfseek 使用的偏移量从流的开头(字节 0)计算字节数,因此有关这些偏移量的整数算法将产生可预知的结果。

字节流将文件视作一个字节序列。 在程序内部,除了上面所述的可能的更改之外,流类似于相同的字节序列。

另请参阅

文件和流