2012-02-11 11 views
2

私はCでファイルを扱っています。非常に巨大なファイルです。 私はこれらのファイルを読み書きしています(フォーマットされたテキストファイルです)。 私はそれらに拡張子を与えません。 私はちょうどfopen("filename","r")と言う。異なるオペレーティングシステムでCでファイルを処理する

今ファイルが問題は、私は、Mac OSでそれを実行しています(Leopardは、特定されるように)、私は別のO/S(で同じファイル(拡張子なし)を開いたとき

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

のような内容をあるいWindowsは特にそうです)、プログラムはファイルの内容を読み込めません。 ファイルの書式が異なるためだと思います。

他のo/sと競合しない標準のファイル形式または拡張機能のソリューションはありますか?

+1

ファイルに拡張子がないため、Windowsではファイルを開くことができません。それらを開くのにエラーが発生しますか?それらを読んで?その場合のエラー( 'errno'をチェックする)?また、OSXからWindowsにファイルをコピーするときに、正しい行末が得られるようにコピーしましたか(OSXとWindowsでは異なります)。 –

+0

テキスト形式の形式は、オペレーティングシステムによってほとんど異なります。両方のOSでファイルを「開く」方法について具体的に説明できますか?あなたのプログラムで 'fopen'を呼び出すか、ファイルをダブルクリックしてあなたをしますか? –

+0

両方のシステムで 'fopen(" a "、" rb ");を使ってファイルを開くことを検討してください。 Windowsでは、通常のCRLFからLFへのマッピングは得られませんが(マップするCRLF行の終了がないため)、ファイルを読むことができます。このようなマッピングの欠如は、 'fgets()'やそれに類する行指向関数を使うと問題になります。 'getc()'や他のバイト指向の関数を使用するかどうかは関係ありません。 –

答えて

4

プレーンテキストファイルを扱っている場合は、UnixやUnixのようなOSesの行は\nで終わり、Windowsでは\r\nで終わることに注意してください。

オペレーティングシステム間でファイル転送をプレーンテキストとして実行すると、クライアントが行末をターゲットOSと互換性があるように変更することがあります。バイナリに転送を設定して、元のファイルの正確なバイト表現を得ることができます。

+0

私はしばしばLinux上でプレーンテキストファイルを作り、Windows上でそれらと一緒に働く同僚に送る。 – mikithskegg

+0

プログラムはほとんどのファイルを作成しますが、驚くべきことにヒョウと同じジェネレーテッドファイルはウィンドウ上に表示されません。ファイルには何も書かれていません。 –

関連する問題