1

我正在用 C 语言进行文件管理培训,我看到有很多方法可以使用 fopen 使用 a、r 等字词打开文件。一切都好,但我还读到,如果在那个词中添加 b 那变成二进制文件。这是什么意思?与普通文件有哪些区别?

4

5 回答 5

7

以文本模式打开文件会导致 C 库执行一些特定于文本的处理。例如,Windows 和 Unix/linux 之间的新行不同,但您可以简单地写 '\n' 因为 C 正在为您处理这种差异。

以二进制模式打开文件不会进行任何这种特殊处理,它只是将其视为原始字节。在C FAQ上有一个更长的解释

请注意,这只在 Windows 上很重要;Unix/linux 系统不需要(需要)区分文本和二进制模式,尽管您可以包含 'b' 标志而不会抱怨。

于 2013-03-20T12:03:16.737 回答
3

如果您以二进制模式打开一个常规文件,您将按原样获取其所有数据,并且您写入其中的任何内容都会出现在其中。

OTOH,如果您以文本模式打开常规文件,则行尾之类的内容会得到特殊处理。例如,值为 13 ( CRor '\r') 和 10 ( LFor '\n') 的字节序列在读取时可以被截断为一个字节,10,或者在写入时 10 可以扩展为 13,然后是 10。这种处理是特定于平台的(读取、编译器/操作系统特定)。

对于文本文件,这通常并不重要。但是,如果您将文本模式应用于非文本文件,则会面临数据损坏的风险。

此外,由于这种特殊处理,不支持在以文本模式打开的文件中以任意偏移量读取和写入字节。

于 2013-03-20T12:05:13.933 回答
2

区别在这里解释

二进制文件是一系列 1 和 0。这被称为机器语言,因为微处理器可以通过发送 1 的信号或不发送 0 的信号来解释这一点。这更紧凑,但人类无法阅读。

出于这个原因,文本文件是一串二进制信号,被指定为显示为对人更友好的字符,它们比二进制更适合语言。ASCII 就是这样一种名称的一个例子。这揭示了事情的真相:所有文件都是最低级别的二进制文件。

但是,二进制适用于任何对我们卑贱的人来说文本可读的应用程序 =] 首选二进制文件的示例应用程序是声音文件、图像和编译程序。二进制比文本更受欢迎的原因是,用机器语言描述图像比用文本描述图像更有效(无论如何都必须翻译成机器语言)。

于 2013-03-20T12:03:34.347 回答
2

有两种类型的文件:文本文件和二进制文件。

二进制文件有两个区别于文本文件的特性: 您可以立即跳转到文件中的任何记录,这提供了像数组一样的随机访问;您可以随时更改文件中任何位置的记录内容。二进制文件通常也比文本文件具有更快的读写时间,因为记录的二进制图像直接从内存存储到磁盘(反之亦然)。在文本文件中,所有内容都必须来回转换为文本,这需要时间。

更多信息在这里

于 2013-03-20T12:04:04.460 回答
2

b用于处理二进制文件。但是,这对 POSIX 兼容的操作系统没有影响。

来自 fopen 的联机帮助页:

   The mode string can also include the letter 'b' either as a last  char‐
   acter  or as a character between the characters in any of the two-char‐
   acter strings described above.  This is strictly for compatibility with
   C89  and has no effect; the 'b' is ignored on all POSIX conforming sys‐
   tems, including Linux.  (Other systems may treat text files and  binary
   files  differently, and adding the 'b' may be a good idea if you do I/O
   to a binary file and expect that your program may be ported to non-UNIX
   environments.)
于 2013-03-20T12:06:51.780 回答