繁体   English   中英

每次写入文件时,如何在前面附加文本?

[英]How can i append text in front everytime i write in a file?

嘿,我正在用c ++处理文件...我是文件处理的新手....我想在每次写入文件时在文件前面附加内容。

我已经使用..... fstream fi(“ user.txt”,ios :: app)打开了文件;

但这总是将内容附加在文件末尾.....

我已经用..写了一个C ++代码。

Fstream fi(“ user.txt”,ios :: app); fi <<“约翰是个好男孩” <

Fstream fi("user.txt",ios::app);
fi<<"john is a great boy"<<endl;

实际结果:它总是在文件末尾附加我的内容...
预期的:它应该始终在文件前面附加内容。

第一个问题是:您为什么要这么做?

然后,在文件处理中,这将变得棘手,因为这不是文件在OS级别上的工作方式-尽管通常以本地方式支持添加,但不是在前置(因此也不支持C ++ STL)。 因此,您需要将新行写出到某个临时文件中,然后始终附加之前的内容。 在Windows,Linux,BSD及其衍生版本上无法实现。

如果您真的坚持的话,您可以根据标准文件流编写自己的流类,以隐藏所有这些工作。 另一个变体可能只读取输出文件一次,将所有行保留在内存中,适当地处理新行,并在关闭流对象时仅将行打印回文件一次。 缺点:如果应用程序崩溃,可能会丢失很多行。 您可以使用std::deque并在新行之前添加,或以相反的顺序将这些行读入std::vector ,追加新行,然后使用反向迭代器打印到文件。

不过,可能最好只是附加到文件上。 然后,您可以编写一个单独的应用程序来反转行顺序–优点:您只需要执行一次反转工作,就可以高效地完成从背面读取的操作,并且在写入新的输出文件时,只需再次追加。 或者,您可以编写自己的文件查看器应用程序,以相反的顺序显示行(如果大小太大,则再次从背面读取,或者一次将所有行都保留在内存中)。

我认为,唯一的方法是将内容写入另一个文件,然后在其中附加旧行。

如果你的文件不是很大,你可以通过转储文件内容考虑stringstream ss第一,前面添加新的内容ss ,并把它写回文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM