我在C中使用文件管理进行培训,我看到有很多方法可以用fopen打开一个文件,使用单词作为a,r等等。一切都好,但是我也读了如果到那个词我添加b成为一个二进制文件。这是什么意思?与普通文件有什么不同?C中的文件管理
C中的文件管理
回答
在文本模式下打开文件会导致C库执行特定于文本的某些处理。例如,Windows和Unix/linux中的新行不同,但是您可以简单地写'\ n',因为C正在为您处理这种差异。
以二进制模式打开文件不会执行任何特殊处理,只会将其视为原始字节。这里有一个更长的解释C FAQ
请注意,这只在Windows上很重要; Unix/linux系统不需要(需要)区分文本和二进制模式,尽管你可以在没有抱怨的情况下包含'b'标志。
+1,但请注意,这是一个特定于Windows的功能。 :) – 2013-03-20 12:17:53
好点,添加这个细节来回答 – jam 2013-03-20 12:51:16
的差异进行说明here
二进制文件是一系列的1和0的。这被称为机器语言,因为微处理器可以通过发送1或0的信号来解释这种情况。这样更紧凑,但不能被人读取。
由于这个原因,文本文件是一个二进制信号字符串,被指定显示为更友好的字符,这使得语言比二进制更好。 ASCII就是这种指定的一个例子。这揭示了这件事的真相:所有文件都是最低级别的二进制文件。
但是,二进制适用于任何应用程序,不需要对我们进行文本清晰读取low =人类=]首选二进制文件的应用程序示例是声音文件,图像和编译程序。二进制优于文本的原因在于,用机器语言描述的图像比用文本描述要更有效(反正它必须翻译成机器语言)。
有两种类型的文件:文本文件和二进制文件。
二进制文件有两个功能可以将它们与文本文件区分开来:您可以立即跳转到文件中的任何记录,该文件以数组形式提供随机访问;并且您可以随时更改文件中任何位置的记录内容。二进制文件通常比文本文件具有更快的读取和写入时间,因为记录的二进制映像直接从内存存储到磁盘(反之亦然)。在文本文件中,所有内容都必须来回转换为文本,这需要时间。
更多信息here
如果您在二进制模式打开一个普通的文件,你会得到它的所有数据,是不管你写进去,就会出现在它。
OTOH,如果你在文本模式下打开一个常规文件,像行结尾这样的东西可以得到特殊的处理。例如,当值为13(CR
或'\r'
)和10(LF
或'\n'
)的字节序列可以被截断为只读一个字节,10时读取或10可以扩展为13,然后写入时为10。这种处理是特定于平台的(读取,编译器/操作系统特定的)。
对于文本文件,这通常是不重要的。但是,如果将文本模式应用于非文本文件,则可能会导致数据损坏。
此外,由于该特殊处理,不支持在以文本模式打开的文件中以任意偏移量读写字节。
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.)
- 1. C++中的文件管理
- 2. C++中的资源文件管理
- 3. 文件I/O管理C
- 4. C#管理文件备份
- 5. C文件管理错误
- 6. C读取管理文件的内容
- 7. Python中的文件管理
- 8. 管理iOS5中的文件
- 9. 文件管理 - 管理java的文本文件
- 10. C#:管理多个App.config文件
- 11. 通过C#管理Excel文件
- 12. 文件管理器中的文件和文件夹不显示在MVC中的Roxy文件管理器中?
- 13. 在Java中管理文件
- 14. 文件管理器
- 15. 管理.exe文件
- 16. 文件管理,SCM?
- 17. DotNetNuke文件管理
- 18. 文件管理iOS
- 19. 管理web.config文件
- 20. 用Rails管理.yml文件中的Rails环境变量管理
- 21. 如何管理源代码管理中的常见源文件?
- 22. C++构建工件管理
- 23. C中的文件处理
- 24. c#中的文件处理#
- 25. c中的文件处理?
- 26. C++中的内存管理。
- 27. Angular的文件管理器
- 28. 管理iDevices上的文件
- 29. 文件管理on Rails的
- 30. 如何管理C++中的位/二进制文件?
有两种类型的文件 - 二进制和文本。谷歌它的更多信息(当'b'没有指定时,它被认为是一个文本文件)(文本文件的例子是一个'.txt'文件,可以用文本编辑器编辑;二进制文件的例子是' .exe',可以启动,但用文本编辑器打开会显示垃圾) – 2013-03-20 11:57:33