2010-12-01 13 views
5

私はバイナリモードでファイルを開いていて、ファイルに書き込むのが好きです。ストリーム "<<"と書き込みの相違点

ofstream ofile("file.txt",ios_base::binary) 
    int a = 1; 
    float f = 0.1; 
    string str = 10; 
    ofile<<a<<f<<str; 

などが書き込みとの差が、使用して「< <」と「ofile.write」を使って何を知っています。 は、バイナリモードで書き込むのに最適で効果的です。

+1

がこれは(フォーマットを無効にすることができる追加の書式としてバイナリ・データのために非常に重要である)任意書式設定せずにデータを出力するようにライトを使用することが一般的に好ましいです。私は 'write()'を使用して実装されています。 – Falmarri

答えて

5

オペレータ< <は、データをテキストとしてフォーマットします。 writeは、ramに格納されているのと同じフォーマットでデータを出力します。したがって、バイナリファイルを作成する場合は、writeを使用します。

ただし、非ポッドタイプを書く場合は注意が必要です。

write(&mystring, sizeof(std::string)); 

クラスまたは構造体自体に格納されていない実際のデータを出力するには、何らかの方法が必要です。

+0

それは 'write(&mystring、mystring.size())'と思われます。 – Dilawar

+0

@Dilawar:いいえ、それはもっと間違っています。文字データは文字列オブジェクト自体に格納されません。これは、動的に別々に割り当てられ、ポインタによって参照されます。 'mystring.c_str()'を使うことができますが、正しく検索できるようにするには、何らかの形でサイズ自体を格納する必要があります。 –

1

AFAIK書き込みは、値 'as is'を渡します。ここでは、演算子< <が何らかのフォーマットを実行します。

hereを参照すると、いくつかの機能を記載した箇条書きの点があります。バイナリデータに対して、上述したよう

はそれだけ

関連する問題