0

WindowsでC++プログラムで作成され、DebianLinuxでコンパイルされたtxtファイルを読み取る必要があります。残念ながら、行末区切り文字に問題があります。LinuxとWindowsでは行末インジケーターが異なることを知っています。その結果、Linuxでは、私のC++プログラムは「correct_line^M」のようなものを読み取ります。

私の質問:LinuxでWindowsで作成したファイルを正しく読み取るにはどうすればよいですか?手動でLinux表現に変換する必要がありますか(避けたい)?

ありがとうございました。

4

2 に答える 2

3

あなたはそれを自分でしなければならないでしょう。(IMNO、filebufテキストモードで開くと、優れたライブラリは自動的にそれを実行します。しかし、私が精通しているライブラリはそうではありません。)

あなたがしていることによっては、それは問題ではないかもしれません。行指向の入力は、とにかく末尾の空白を受け入れる必要があり、余分な0x0D文字は空白です。したがって、編集者を除いて、通常は問題になりません。

(Windowsで)ファイルを書き込むときに余分な0x0Dを抑制したい場合は、ファイルをバイナリモードで開くだけです。さらに言えば、ファイルの移植性が懸念される場合は、ファイルをバイナリモードで開き、プロトコルで必要な規則を記述することをお勧めします。(2文字のシーケンス0x0Dを使用すると、0x0Aは多かれ少なかれ標準であり、ほとんどのインターネットプロトコルで指定されています。)もう一度読み取るときは、バイナリモードで開き、通常の規則のいずれかを受け入れるようにコードを記述します。2文字のシーケンス0x0D、0x0A、または単一の0x0Dまたは単一の0x0A。(これは、フィルタリングstreambufを使用して実行できます。)

于 2012-05-18T10:57:37.983 に答える
0

実行できますdos2unix。それはあなたのファイルを変換します。

于 2012-05-18T10:12:48.810 に答える