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

现在我想在写入磁盘之前修改ofsto的内容?"Hello, money!"我该如何实施?

4

2 回答 2

3

std::endlIO 操纵器将刷新流缓冲区的内容,因此如果您稍后想要在其内容被刷新之前处理流,则必须将其更改为a '\n'

此外,假设您真正想要这样做的原因是因为您需要操作格式化后要写入的字符串,我会让您意识到您可以使用 anstd::ostringstream来利用格式化的功能流式传输并将结果收集到一个字符串中,然后您可以对其进行操作并正常写入文件。

如果这对您来说是显而易见的信息并且您的用例更复杂,那么您将不得不编写自己的流缓冲区,正如@MatsPetersson 所指出的那样。

于 2013-02-03T23:21:24.247 回答
2

编辑:您应该创建一个派生自的类filebuf(出于本讨论的目的,myfilebuf并使用它来构造一个ostream,这比上述更准确。

myfilebuf你实现sputbackc中,并有一个状态机来识别“Hello,World!”,并将其替换为“Hello,Money!”,这可能意味着缓冲第二层,直到你知道它是哪一层。

于 2013-02-03T23:13:00.437 回答