2012-04-07 3 views
0

ifstream、ofstreamのC++ fstreamを学習しようとしています。私のプロジェクトの途中で、もしofstreamとifstreamで同じファイルにアクセスしているのであれば、readのために&を書いてください。ストリームを閉じる方が良いでしょう。C++で同じfstreamオブジェクトを使用して読み書きするときにバグ誘発機能はありますか?

Like ofstream write_stream(...); ifstream read_stream(....);上記の場合

// Accessing pointers using both read_stream, write_stream interchangebly 

    read_stream.read(....); 
    write_stream.write(....); 

    read_stream.close(); 
    write_stream.close(); 

///

、Iストリームの両方がファイルに同じポインタを使用して推測するので、私はポインタの動きを認識する必要があり、私はそれぞれを求めなければならないと私がread()またはwrite()しようとするたびに。

私はそうだと思います。

はこれ以上の混乱を避けるために、私は上記のプログラムに知っておくべきことを、このフォーマット

fstream read_write_stream("File.bin",ios::in|ios::out|ios::binary); 
read_write_stream.seekp(pos); 
read_write_stream.seekg(pos); 
read_write_stream.tellp(); 
read_write_stream.tellg() 

read_write_stream.read(...); 
read_write_stream.write(...); 

read_write_stream.close() 

機能を誘発する任意のバグがありますを使用することを決定しました?助言をお願いします

答えて

1

標準が明示的にこのケースを参照しているかどうかわかりませんが、同じ外部リソースを変更するために複数のストリームを使用する場合に起こることをC++コンパイラが約束できないと思います(この場合のファイル)。 fstreamの内部実装に加えて、それはあなたが書いているOSとハードウェアに依存します。私が正しい場合、この操作はデフォルトで未定義の動作になります。

2つの異なるストリームを使用する場合は、それぞれが独自のputおよびgetポインタを管理します。それぞれがバッファリングを持ちます。つまり、flush()を使用しないと、操作はファイルに対して行われます。

ストリームを1つ使用して読み書きする場合、その動作は予測可能であり、わかりやすいものになります。

関連する問題