我可以在写入磁盘之前修改ofstream吗?

时间:2013-02-03 23:10:05

标签: c++ visual-c++ stl

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

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

2 个答案:

答案 0 :(得分:3)

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

另外,假设您实际想要这样做的原因是因为您需要操作格式化后要写入的字符串,我会告诉您可以使用{{1利用格式化流媒体的功能并将结果收集到一个字符串中,然后您可以操作并正常写入文件。

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

答案 1 :(得分:2)

修改:您应该创建一个派生自filebuf的类(出于本讨论myfilebuf的目的,并使用它来构建ostream,这比上面的更准确。< / p>

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