0
std::ofstream ofs;
ofs << "Hello, world!" << endl;

ディスクに書き込む前に、の内容ofsを変更したいですか?"Hello, money!"どうすれば実装できますか?

4

2 に答える 2

3

std::endlIOマニピュレータはストリームバッファのコンテンツをフラッシュするため、後でコンテンツがフラッシュされる前にストリームを処理する場合は、これをに変更する必要があります'\n'

また、実際にこれを実行したいのは、フォーマット後に書き込まれる文字列を操作する必要があるためであると想定して、フォーマットされstd::ostringstreamた機能を活用できることを知っておく必要があります。ストリーミングして結果を文字列に収集し、それを操作して通常はファイルに書き込むことができます。

これが明らかな情報であり、ユースケースがより複雑な場合は、@ MattsPeterssonが指摘しているように、独自のストリームバッファを作成する必要があります。

于 2013-02-03T23:21:24.247 に答える
2

編集:から派生したクラスを作成する必要がありますfilebuf(この説明の目的のために、それを使用して、上記よりも正確なmyfilebufを構築します。ostream

myfilebufを実装しsputbackc、ステートマシンを使用して「Hello、World!」を識別し、「Hello、Money!」に置き換えます。これは、2番目のレイヤーがどれであるかがわかるまでバッファリングすることを意味します。

于 2013-02-03T23:13:00.437 に答える