【问题标题】:Processing files in C under different operating systems不同操作系统下用C处理文件
【发布时间】:2012-03-03 20:23:37
【问题描述】:

我正在处理 C 中的文件。它们是非常非常大的文件。 我读写这些文件(它们只是格式化的文本文件)。 我不给他们延期; 我只是说fopen("filename","r")

现在一个文件的内容类似于

1 line1 100
2 line2 200
.
.
20000 line 20000 14567

问题是我在 Mac OS(特别是 Leopard)中执行它,当我在另一个 o/s(特别是 Windows)中打开相同的文件(无扩展名)时,程序无法读取文件。 我想这是因为文件的格式不同。

对于标准文件格式或扩展名不与其他操​​作系统冲突的任何解决方案?

【问题讨论】:

  • 只是因为文件没有扩展名,在 Windows 中是不可打开的。打开它们时是否出错?读他们?在这种情况下会出现什么错误(检查errno)?此外,在将文件从 OSX 复制到 Windows 时,您是否以某种方式复制它们以便获得正确的行尾(它们在 OSX 和 Windows 上有所不同)?
  • 文本格式的格式在操作系统之间差别很小。您能否更具体地说明您如何在两个操作系统上“打开”文件?您是在程序中调用fopen 还是双击文件?
  • 考虑在两个系统上使用fopen("a", "rb"); 打开文件。在 Windows 上,您不会获得正常的 CRLF 到 LF 映射(因为没有要映射的 CRLF 行尾),但您将能够读取文件。如果您使用fgets() 或类似的面向行的函数,那么缺少映射会很重要;使用getc() 或其他面向字节的函数都没关系。
  • 1.不,我在打开时没有收到任何错误。2.文件是由程序直接创建的。3是的,我用 fopen() 打开 3.我使用 fscanf 来读取上述格式化的内容.在我的程序中的某个时刻,我将生成一个文件,然后程序使用它并继续生成另一组文件,它们在其他地方使用,在 OSX 中,所有文件都被正确制作和使用,但在 Windows 中,文件被制作但由于对于某些未知行为,程序不会读取预期的格式并生成空文件(无用)

标签: c file text operating-system format


【解决方案1】:

如果您使用纯文本文件,请记住,在 Unix 和类 Unix 操作系统中,行以 \n 结尾,而在 Windows 中,它们以 \r\n 结尾。

如果您在操作系统之间以明文形式进行文件传输,您的客户端可能会更改行尾以与您的目标操作系统兼容。您可以将传输设置为二进制,以便获得原始文件的精确字节表示。

【讨论】:

  • 我经常在 Linux 上生成纯文本文件,然后将它们发送给在 Windows 上使用它们的同事,但仍然没有出现任何问题。
  • 该程序创建的文件很少(格式类似于我在问题中提到的示例),但令人惊讶的是它适用于 leopard 并且相同的生成文件不适用于 Windows,我没有向我的文件写入任何特定格式,它只是简单的字符!
猜你喜欢
  • 2012-07-14
  • 2011-06-21
  • 2015-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-22
相关资源
最近更新 更多