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

41ik7eoe  于 12个月前  发布在  其他
关注(0)|答案(3)|浏览(100)
std::ofstream ofs;
ofs << "Hello, world!" << endl;

字符串
现在我想在写入磁盘之前将ofs的内容修改为"Hello, money!"。如何实现?

n9vozmp4

n9vozmp41#

std::endl IO操作器将刷新流缓冲区的内容,因此如果您稍后想要在其内容被刷新之前处理流,则必须将其更改为'\n'
此外,假设您实际上想要这样做的原因是因为您需要操作格式化后将要写入的字符串,我将让您意识到这样一个事实,即您可以使用std::ostringstream来利用格式化流的功能并将结果收集到字符串中,然后您可以操作并通常写入文件。
如果这对您来说是显而易见的信息,并且您的用例更复杂,那么您必须编写自己的流缓冲区,正如@MatsPetersson所指出的那样。

jvlzgdj9

jvlzgdj92#

编辑:你应该创建一个从filebuf派生的类(为了讨论的目的,myfilebuf),并使用它来构造一个ostream,这比上面的更准确。
myfilebuf中,您实现了sputbackc,并有一个语句机来识别“Hello,World!",并将其替换为“Hello,Money!",这可能意味着缓冲第二层,直到您知道它是哪一层。

mwngjboj

mwngjboj3#

没有什么好的方法可以对fstream进行通用的修改,所以解决方案是不要使用fstream,而是将数据写入stringstream,然后修改它,再将它写入磁盘。

//write to stringstream
std::stringstream ss;
ss << "Hello, world!" << endl;

//modify stringstream
std::string text = ss.str();
text.replace(7, 5, "money");
ss.str(text);

//write stringstream to disk
std::ofstream ofs;
ofs << ss.rdbuf();

字符串

相关问题