2012-02-11 34 views
2

我正在使用C文件。它们是非常非常大的文件。 我读写这些文件(它们只是格式化的文本文件)。 我不给他们任何延伸; 我只是说fopen("filename","r")在不同操作系统下处理C文件

现在文件具有类似

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

问题是我执行它在Mac OS(豹为特定)和内容,当我在另一个O/S打开相同的文件(没有扩展名)( Windows是特定的)程序无法读取文件的内容。 我想这是因为该文件的格式不同。

标准文件格式或扩展名的任何解决方案与其他o/s不冲突?

+1

仅仅因为文件没有扩展名,在Windows中不能打开。你打开它们时出错了吗?读他们?在这种情况下出现什么错误(检查“errno”)?此外,将文件从OSX复制到Windows时,是否以某种方式复制它们,以便获得正确的行结束符(它们在OSX和Windows上有所不同)? – 2012-02-11 19:53:00

+0

操作系统之间的文本格式格式差别很小。你能更具体地说明你是如何在这两个操作系统上“打开”文件的?你是通过在程序中调用fopen还是通过双击该文件? – 2012-02-11 20:13:21

+0

考虑在两个系统上用'fopen(“a”,“rb”);'打开文件。在Windows上,您不会得到正常的CRLF到LF映射(因为没有要映射的CRLF行尾),但是您将能够读取该文件。如果使用'fgets()'或类似的面向行的函数,这种映射的缺失会很重要;如果使用'getc()'或其他面向字节的函数,则无关紧要。 – 2012-02-11 20:25:24

回答

4

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

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

+0

我经常在Linux上生成纯文本文件,并将它们发送给在Windows上使用它们的同事,并且从未出现任何问题。 – mikithskegg 2012-02-11 20:35:34

+0

该程序创建了几个文件(格式如问题中提到的示例),但令人惊讶的是它在豹和相同的genrated文件不在窗口上工作,我不写任何特定的格式到我的文件,它只是简单的字符! – 2012-02-12 19:12:48