0

ファイルを読んだところ0x0D0x0A. 変換を行うのはウィンドウであることだけを知っています。

しかし、バイナリモードを使用しましたが、それを防ぐことはできませんか?

ifstream input(inputname, ios::binary);input.get(ch);

どうすれば回避できますか。を取得したいだけです\n

書き込みファイルはどうですか?

事前にThx。

4

2 に答える 2

2

\r\n行末を使用するシステムを使用している場合、ファイルをテキストモードで開くと、システムはこれらを自動的に標準に変換し\nます\r。バイナリ モードでファイルを開くと、この変換が妨げられます。

この規則を使用しないシステムを使用している場合、行末を変換するモードはありません。自分で手動で変換するか、外部ツールを使用してファイルを前処理する必要があります。


ファイルが使用しているかどうかを検出したい場合\r\nは、手動で行う必要があります。テキスト ファイルをスキャンして、every\nの前に\r.

別の方法として、ファイルが使用する行末の種類を事前に検出しようとする代わりに、特別に処理するロジックを処理コードに追加し、\rその後に\n. 何かのようなもの:

for (int i=0; i<n; ++i) {
    if ('\r' == text[i] && (i+1<n) && '\n' == text[i+1])
        ++i; // skip carriage return, just handle newline
    if ('\n' == text[i])
        handle newline...
    else
        handle other characters
}
于 2012-12-17T20:27:49.337 に答える
1

うーん。バイナリモードを使用する場合ios::binaryは、ファイルをバイナリ(未調理、未加工)のまま読み取りたいことをライブラリに通知します。
テキストファイルでmsdos(最近ではwindows-ntと呼ばれる人もいます)を使用すると、行は0d0aで終了します。したがって、この2つの文字を表示したくない場合は、ファイルをテキストモードで開く必要があります(ios :: binaryを省略してください)。
または、dos2unixなどのユーティリティを使用してこれらのファイルをUNIXスタイルに変換する必要がありますが、Windowsシステムを使用している場合、たとえばメモ帳でこのファイルを期待どおりに表示できない場合があります...

于 2012-12-17T20:22:33.513 に答える