0

私はfstreamオブジェクトを扱っていますが、eof と目的の場所の間のスペースをゼロで手動で埋めることなく、ファイルの末尾を超えて何かを書き込むことができる方法を知りたいと思っていました。

例 :

fstream someFile;
someFile.open("foo.dat", ios :: out | ios :: trunc | ios :: binary); // file is created, and empty
someFile.seekp(100, ios :: beg); // expecting 100 zeroes to be written in file, but nothing happens
someFile.write("yodelay-hee-hoo", 15); // file is still empty, does not work

この問題について約 1 時間検索してきましたが、関連性の高いものは見つかりませんでした。私が遭遇した唯一のことは、.seekpwithを使用するios :: endとギャップをゼロで埋めることになっていると言った人ですが、試してみましたが、うまくいきませんでした。

それが役立つ場合、私はVS2010、ネイティブコンパイルを使用しています。ヒントを提供できれば、ありがとうございます。

4

1 に答える 1

1

短い: .seekp()以前に でファイルの終わりに到達した場合は失敗するため、事前.seekg()に を呼び出す必要があります.clear()


長いです:

最初に でファイルの終わりを超えた位置を探し.seekg()、その場所にデータがあるかどうかを確認したため、書き込み操作が失敗したことがわかりました。.eof().peek()

.seekg()ファイルの終わりに達した場合でも.eof()、読み取り/ピーク/取得操作が試行されるまで常に false を返すようであり.peek()、終わりを過ぎた位置には null 以外の値 (-1) を返します。ファイル。

したがって、解決策は、ファイルの終わりに達したかどうかを確認する前に非ヌル文字をチェックし、ファイルの終わり.clear()過ぎた場合はbeforeを呼び出し.seekp()、すべてを解決することでした。

于 2012-12-07T19:40:59.460 に答える