2011-02-09 5 views
6

私たちがWindowsで知っていることはすべて、EOLはCRLFであり、MacではLinuxのLFとCRです。 (more_infoLinuxまたはMacでC FILE *経由でWindowsでファイルを作成する方法

Windowsでは、WindowsとLinuxの両方でWinファイルを読み込むプログラムを書きたいと思っています。ファイルを開くには "rt"モードでfopenを使いますが、どのように行を読むのか分かりません。 fgetsはWindows下でCRLFとLFまで読み込みますが、EOL = CRファイルでも動作します。

解決策は何ですか?前もって感謝します。

+5

LinuxはCRではなくLFを使用します。 MacOS9はプレーンCRを使用しました。 –

+0

はいあなたは正しいですPiotrLegnica http://mc-computing.com/languages/CR_LF.htmこれは全リストです。 –

+3

@Mihran:MacOSXはLFを使用しています。 –

答えて

1

私には何も見当たりませんでしたので、本体にfgetcを使用して自分自身のmy_fgets関数を書くことにしました。

1

ファイルをrtモード(読み取りテキスト)で開いている限り、正常であるはずです。 fgets()は1行を返し、プラットフォーム間の微妙な違いを処理します。ファイルに書き込むときは、EOLとして '\ n'を使うと、あなたのプラットフォームの正しい行末が得られます。これがテキストモードでファイルを開く理由です。バイナリモードを使用する場合は、ソフトウェアのすべての行末を処理する必要があります。

+0

私はLinuxサーバーからWindowsのクライアントプログラムを介してファイルを取得しています。だから、ほとんどの場合、私が読むファイルにLinux形式のEOLがあるのです。 –

+0

@Mihran:それは問題ではありません。違いはストリームによって処理されるので、心配しないでください。WindowsのLinux行末でファイルを書いていない限り:) –

+0

私は試しました。それは動作しません:(LFとCRLFはWindowsで動作しますが、CRはありません。MacとLinuxでこれを試してはいけませんが、すべて正常に動作することを確かめてください) –

2

"t"モードで開くには、ファイルが実行中のプラットフォームに準拠している必要があります。それ以外の場合は、バイナリモードで開いて差異をソートする必要があります。

Cライブラリは、さまざまなプラットフォームでほぼ同じように動作するプログラムを作成するのに役立ちますが、ファイルを「クロスリーディング」することはサポートしていません。

関連する問題