0

私は Windows でアプリケーションを開発しており、fstreams を使用してファイルの読み取りと書き込みを行っています。

私は次のように開いたfstreamで書いています:

fs.open(this->filename.c_str(), std::ios::in|std::ios::out|std::ios::binary);

このコマンドで書き込みます

fs.write(reinterpret_cast<char*>(&e.element), sizeof(T));

書き込みごとにファイルを閉じる

fs.close()

次のように開いたifstreamで読む:

is.open(filename, std::ios::in);

そしてこのコマンドで読む:

is.read(reinterpret_cast<char*>(&e.element), sizeof(T));

書き込みは順調です。しかし、私はこの方法でループを読みます:

while(!is.eof())
{
  is.read(reinterpret_cast<char*>(&e.element), sizeof(T));
}

ファイルの終わりに到達する必要がありますが、プログラムは読み取りを続けます。istellg pos は 0 で、gcount も 0 ですが、fail ビットと eof ビットはどちらも問題ありません。

私はこれに夢中です、助けが必要です...

4

1 に答える 1

3

これを試して:

while(is.read(reinterpret_cast<char*>(&e.element), sizeof(T))) {}

istreamまた、binaryフラグを付けて も開く必要があります。

is.open(filename, std::ios::in | std:ios::binary);

永遠に読むとしたら、それは何と読みますか? Tは何型?

于 2010-04-13T18:08:24.293 に答える