应该打开任何C文件作为二进制文件

tva*_*vaz -1 c memory binaryfiles file

我读过某个地方我们应该总是在C中打开文件作为二进制文件(即使它是一个文本文件).当时(几年前)我并不太关心它,但现在我真的需要了解是否是这种情况以及如何实现.

我一直在努力寻找这方面的信息,但我找到的最多的是它们之间的开放差异 - 甚至不是它们的结构差异.

所以我想我的问题是:为什么我们总是打开文件作为二进制文件,即使我们之前猜测它是一个文本文件?第二个问题在于每个文件本身的结构,是一个像"加密"文本文件的二进制文件?

Rei*_*ica 5

名称"文本"与"二进制"虽然非常有助,但有时会让您想知道应用哪一个.最好将它们转换为基础机制,并根据您需要的那些进行选择.

"二进制"也可称为"逐字"开放模式.文件中的每个字节都将在磁盘上完全按原样读取.这意味着如果它是一行包含文本"ABC"的Windows文件(包括行终止符),则从文件读取的字节将是65 66 67 13 10.

"文本"模式也可以称为"行终止器翻译"打开模式.当文件包含由您作为"行终止符" (1)运行的平台定义的1个或多个字符的序列时,将从文件中读取整个序列,但运行时将使其显示为如果只读取了字符'\n'(10使用ASCII时).对于上面的相同Windows文件,如果它在Windows上作为文本文件打开,则从文件读取的字节将是65 66 67 10.

写入时同样适用:文件openend为"binary",用于写入将精确写入您给出的字节.打开为"text"的文件将字节'\n'(10以ASCII格式)转换为平台定义为行终止字符序列的任何内容.

我不认为可以从上面提取"总是这样做"的规则,但也许你可以用它来为每个案例做出明智的决定.


(1)在Unix风格的系统中,行终止字符序列是LF(ASCII 10).在Windows上,它是双字符序列CR LF(ASCII 13 10).在旧的X前Mac OS上,它只是单字符CR(ASCII 13).

  • @малинчекуровcodepoint26为"EOF"是微软特有的,现在,文本文件不必以这样的字符结尾. (2认同)