C 中 File I/O 中的二进制模式和文本模式
Binary mode and Text mode in File I/O in C
在 Text Mode
或 Binary Mode
中打开文件时我有点困惑。我阅读了一些文档和示例,观察到它在 Text Mode
和 Binary Mode
中使用了 getc()-putc()
或 fgets()-fputs()
。我可以在 Text Mode
中打开一个文件以使用 fread()-fwrite()
还是我应该只使用 Binary Mode
用于二进制 I/O 函数,如 fread()-fwrite()
。
要使用 fseek()
、ftell()
我应该使用哪种模式 Text Mode
或 Binary Mode
?
我正在使用 C
编程语言和 Linux
发行版 (fedora)。
您可以在文本和二进制中使用 fread
和 fwrite
,尽管它们更常用于二进制。您还可以在两种模式下使用 fseek
和 ftell
(wb
(写入二进制)和 w
(写入文本))
在 Unix 系统中(尤其是 linux),二进制模式和文本模式之间没有区别(库只是忽略了 t
限定符),但在其他系统中则不同。在Windows中,行尾用\r\n
个字符的序列表示,在输入时被转换成\n
,而在输出时,\n
被转换成一个序列\r\n
个文本文件。二进制文件根本没有被转换,所以没有转换,无论是在输入还是在输出中。您必须证明此转换是不可逆的,因为您不知道字符或序列是否已转换,因为它们是在过程中转换的,还是已经以读取的形式存在。
文本模式意味着您的文件是文本文件,并且将被转换以符合操作系统的行结束方式。如果它实际上是文本,通常这不是问题,但如果您使用实际二进制文件(例如压缩文件或 .jpg
图像)执行此操作,结果将不可预测。
在 Text Mode
或 Binary Mode
中打开文件时我有点困惑。我阅读了一些文档和示例,观察到它在 Text Mode
和 Binary Mode
中使用了 getc()-putc()
或 fgets()-fputs()
。我可以在 Text Mode
中打开一个文件以使用 fread()-fwrite()
还是我应该只使用 Binary Mode
用于二进制 I/O 函数,如 fread()-fwrite()
。
要使用 fseek()
、ftell()
我应该使用哪种模式 Text Mode
或 Binary Mode
?
我正在使用 C
编程语言和 Linux
发行版 (fedora)。
您可以在文本和二进制中使用 fread
和 fwrite
,尽管它们更常用于二进制。您还可以在两种模式下使用 fseek
和 ftell
(wb
(写入二进制)和 w
(写入文本))
在 Unix 系统中(尤其是 linux),二进制模式和文本模式之间没有区别(库只是忽略了 t
限定符),但在其他系统中则不同。在Windows中,行尾用\r\n
个字符的序列表示,在输入时被转换成\n
,而在输出时,\n
被转换成一个序列\r\n
个文本文件。二进制文件根本没有被转换,所以没有转换,无论是在输入还是在输出中。您必须证明此转换是不可逆的,因为您不知道字符或序列是否已转换,因为它们是在过程中转换的,还是已经以读取的形式存在。
文本模式意味着您的文件是文本文件,并且将被转换以符合操作系统的行结束方式。如果它实际上是文本,通常这不是问题,但如果您使用实际二进制文件(例如压缩文件或 .jpg
图像)执行此操作,结果将不可预测。