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

标签 c++ window file-handling

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

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

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

我用.....写了一个c++代码

Fstream fi("user.txt",ios::app); fi<<"约翰是个好 child "<

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

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

最佳答案

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

然后对于文件处理,这将变得棘手,因为这不是文件在操作系统级别上的工作方式——虽然通常 native 支持附加,但前置不是这种情况(因此在 C++ STL 中不支持任何一个)。所以你需要将新行写到一些临时文件中,然后一直追加以前的内容。在 Windows、Linux、BSD 和衍生产品上没有办法。

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

不过,您最好只附加到文件中。然后,您可能会编写一个单独的应用程序来反转行顺序 - 优点:您只需进行一次反转工作,从后面读取可以非常有效地完成,并且可以编写新的输出文件,你只会再次追加。或者,您可以编写自己的文件查看器应用程序,以倒序显示行(再次从后面读取,如果大小太大,或者一次将所有行保存在内存中)。

关于c++ - 每次写入文件时如何在前面附加文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54667641/

相关文章:

c++ - 递增解引用迭代器

c++ - 有符号的十六进制文字可能吗?

java - setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 有什么意义?

c - 从文件中读取值并将其存储在二维矩阵中

python - 从文件中读取并写入另一个python

c++ - 提交时的 SIGSEGV

C++ I/O 库

javascript - 在 javascript 中使用 'window' 前缀的好处

html - 如何控制html窗口的大小?

java - 无法写入文件,使用 File 类在 java 中创建