2013-03-20 32 views
1

我在C中使用文件管理进行培训,我看到有很多方法可以用fopen打开一个文件,使用单词作为a,r等等。一切都好,但是我也读了如果到那个词我添加b成为一个二进制文件。这是什么意思?与普通文件有什么不同?C中的文件管理

+1

有两种类型的文件 - 二进制和文本。谷歌它的更多信息(当'b'没有指定时,它被认为是一个文本文件)(文本文件的例子是一个'.txt'文件,可以用文本编辑器编辑;二进制文件的例子是' .exe',可以启动,但用文本编辑器打开会显示垃圾) – 2013-03-20 11:57:33

回答

7

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

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

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

+1

+1,但请注意,这是一个特定于Windows的功能。 :) – 2013-03-20 12:17:53

+0

好点,添加这个细节来回答 – jam 2013-03-20 12:51:16

2

的差异进行说明here

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

由于这个原因,文本文件是一个二进制信号字符串,被指定显示为更友好的字符,这使得语言比二进制更好。 ASCII就是这种指定的一个例子。这揭示了这件事的真相:所有文件都是最低级别的二进制文件。

但是,二进制适用于任何应用程序,不需要对我们进行文本清晰读取low =人类=]首选二进制文件的应用程序示例是声音文件,图像和编译程序。二进制优于文本的原因在于,用机器语言描述的图像比用文本描述要更有效(反正它必须翻译成机器语言)。

2

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

二进制文件有两个功能可以将它们与文本文件区分开来:您可以立即跳转到文件中的任何记录,该文件以数组形式提供随机访问;并且您可以随时更改文件中任何位置的记录内容。二进制文件通常比文本文件具有更快的读取和写入时间,因为记录的二进制映像直接从内存存储到磁盘(反之亦然)。在文本文件中,所有内容都必须来回转换为文本,这需要时间。

更多信息here

3

如果您在二进制模式打开一个普通的文件,你会得到它的所有数据,是不管你写进去,就会出现在它。

OTOH,如果你在文本模式下打开一个常规文件,像行结尾这样的东西可以得到特殊的处理。例如,当值为13(CR'\r')和10(LF'\n')的字节序列可以被截断为只读一个字节,10时读取或10可以扩展为13,然后写入时为10。这种处理是特定于平台的(读取,编译器/操作系统特定的)。

对于文本文件,这通常是不重要的。但是,如果将文本模式应用于非文本文件,则可能会导致数据损坏。

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

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.)