4

次のコードスニペットを使用した実験では、ios:binaryモードの有無にかかわらずストリームを作成したかどうかにかかわらず、特に違いは見つかりませんでした。

int main()
{
    ifstream ostr("Main.cpp", ios::in | ios::binary | ios::ate);
    if (ostr.is_open())
    {
        int size = ostr.tellg();
        char * memBlock = new char[size + 1];
        ostr.seekg(0, ios::beg);
        ostr.read(memBlock, size);
        memBlock[size] = '\0';
        ofstream file("trip.cpp", ios::out | ios::binary);
        file.write(memBlock, size);
        ostr.close();
    }
}

ここでは、元のソースファイルを別の名前の別のファイルにコピーしようとしています。

私の質問は、fstreamオブジェクトがios :: binaryモードの有無にかかわらず開かれたときの読み取り/書き込み呼び出し(バイナリファイルIOに関連付けられている)の違いは何ですか?バイナリモードを使用する利点はありますか?ファイルIOを実行するときに使用する場合と使用しない場合

4

2 に答える 2

10

binaryとモードの唯一の違いtextは、「\n」文字の処理方法です。

binaryモードでは、変換はありません。

textモードでは\n、書き込み時にに変換されますend of line sequence。モードでは
、読み取り時にに変換されます。textend of line sequence\n

end of line sequenceプラットフォームに依存します。

例:

ASCIIベースのシステム:

LF    ('\0x0A'):      Multics, Mac OS X, BeOS, Amiga, RISC OS
CRLF  ('\0x0D\0x0A'): Microsoft Windows, DEC TOPS-10, RT-11
CR:   ('\0x0D'):      TRS-80, Mac OS Pre X
RS:   ('\0x1E'):      QNX pre-POSIX implementation.
于 2012-10-07T07:34:16.120 に答える
1

データに変更を加えずにファイルをバイナリで書き込みたい場合は、ios::binaryフラグを指定します。テキストモードでファイルを書きたい場合はios::binary、を指定しないでください。行末の翻訳などが表示される場合があります。UNIXライクなプラットフォームを使用している場合、バイナリ形式とテキスト形式は同じであるため、違いは見られません。

于 2012-10-07T06:31:59.113 に答える