【问题标题】:Binary mode and Text mode in File I/O in CC语言文件I/O中的二进制模式和文本模式
【发布时间】:2021-11-27 08:23:42
【问题描述】:

何时在Text ModeBinary Mode 中打开文件我有点困惑。我阅读了一些文档和示例,发现它在Text ModeBinary Mode 中使用了getc()-putc()fgets()-fputs()。我可以在Text Mode 中打开一个文件以使用fread()-fwrite(),或者我应该只将Binary Mode 用于像fread()-fwrite() 这样的二进制I/O 函数。 要使用fseek()ftell()应该使用Text ModeBinary Mode哪个模式?

我正在使用C 编程语言和Linux 发行版(fedora)。

【问题讨论】:

  • Linux上没有区别。

标签: c file-io fgets fread stdio


【解决方案1】:

在 Unix 系统(尤其是 linux)中,二进制模式和文本模式之间没有区别(库只是忽略了 t 限定符),但在其他系统中却有。在Windows中,行尾用\r\n字符序列表示,输入时转换为\n,输出时\n转换为\r\n序列用于文本文件。二进制文件根本不被转换,因此在输入或输出中都没有进行任何转换。您必须证明此转换是不可逆的,因为您不知道字符或序列是否已转换,因为它们在过程中已转换或已在读取的表单中。

文本模式意味着您的文件是文本,并且将被转换为符合操作系统的行结束方式。如果它实际上是文本,通常这不是问题,但如果您使用实际二进制文件(例如压缩文件或.jpg 图像)执行此操作,结果将是不可预测的。

【讨论】:

    【解决方案2】:

    您可以在文本和二进制文件中使用freadfwrite,尽管它们更常用于二进制文件。您还可以在两种模式下使用fseekftellwb(Write-Binary)和w(Write-Text))

    【讨论】:

      猜你喜欢
      • 2014-07-06
      • 1970-01-01
      • 2014-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-10
      • 1970-01-01
      相关资源
      最近更新 更多