【发布时间】:2014-09-13 12:37:56
【问题描述】:
如果我以文本模式而不是二进制模式打开文件有什么区别吗?因为我读到 UNIX 和 Linux 不区分文本文件和二进制文件。
【问题讨论】:
-
对于 unix 没有区别。 (文本与二进制只是微软的产物)
-
不仅,AFAIK 符合 C99 标准规范。
-
并非所有“文本”文件都会通过 CR/LF 翻译被正确读取;只有那些以 ASCII(或接近的派生词或扩展名)编码的才会是。可以说,以 EBCDIC 编码的文本文件是“文本文件”,因此这至少需要对所使用的编码进行一些定义。此外,CR/LF 翻译可能会弄乱 16 位 Unicode 文本文件。可以说一个单独的“文本模式”实际上已经过时了。
-
@wlidplasser:我认为一些旧版本的 MacOS 也关心二进制与文本? (但我不知道MacOS9)
-
IIR,一些系统在二进制与文本模式下的另一个区别是
EOF。在文本模式下,'^Z'不会被读取为char,但会触发EOF条件。写入文件并关闭文件时将应用'^Z'。即使是一个旧系统也可以区分其在文本/二进制模式下的行缓冲——但我怀疑它是否非常符合 C 语言。许多操作系统确实(仍然如此?)区分。如果您希望您的代码与非 *nix 系统不兼容,请忽略 text/binary 设置。