2012-02-11 80 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