写入文件开头,保留文件内容
Writing at the beginning of a file, keeping file contents
我有一个文本文件,我想在那里写。我想始终保留文件内容。我想按照"FIFO"(最后一次写入总是在文件的第一行)编写。
我尝试使用带有 ate 模式的 fout.open("filename");
来保留文件内容,之后使用seekg(0)
尝试将光标写回文件开头。没用。
我发现这样做的独特方法我认为这非常耗时,将所有文件内容复制到临时文件中。写我想写,然后在目标文件的末尾写临时文件的内容。
一定有一个简单的方法可以完成此操作吗?
尔赫,无论如何,您都必须重写内存中的整个文件。 您不能简单地将文件保留在原处并预置内存,特别是因为它是一个简单的文本文件(也许如果有某种形式的元数据,您可以......
无论如何,您最好的机会是将旧内容刷新到临时位置,编写您需要的内容并附加旧内容。
我不确定你要什么。 如果要添加行到文件的开头,唯一的方法是打开一个新建,临时文件,写行,将旧文件复制到在新行之后,然后删除旧文件并重命名临时。
如果原始行具有固定长度,并且您想要替换它,那么你所要做的就是用两者打开文件 ios_base::in
和ios_base::out
.
首先,您应该意识到文件在历史上是流,即它们只能在一个方向上读取和写入。这来自文件存储在磁带上的时代,磁带可以向一个方向移动(当时)。
但是,如果您只想在前面加上前缀,那么您可以向后存储文件。听起来很傻?也许吧,但这只需要一点开销。
除此之外,对于当前的操作系统,您需要制作一个副本来预置。虽然文件不再是流,并且可以在硬盘上随机访问,但它们仍然朝着一个方向增长。当然,你可以创建一个文件系统,其中文件双向增长,但我还没有听说过。
使用
filebuf myfile;
myfile.open ("test.txt", ios::in | ios::out);
if (!myfile.is_open()) cout << "cannot open" << endl;
myfile.sputn("AAAA", 4);
myfile.close();
filebuf myfile2;
myfile2.open ("test.txt", ios::in | ios::out);
if (!myfile2.is_open()) cout << "cannot open 2" << endl;
myfile2.sputn("BB", 2);
myfile2.close();
所需顺序写入字符串,然后刷新到文件
- 即使使用 FILE_FLAG_DELETE_ON_CLOSE 属性创建文件,文件也会保留在磁盘上
- 如何多次写入.CSV文件并使用C 保留先前的数据
- 如何修复"文件保留原始位置,复制后不复制扩展名"?
- 提升日志 V2 轮换保留一个文件作为"master"
- C++-将stdout/stderr复制到文件,同时保留控制台输出
- 如何在Windows和更高版本上保留内存,并将文件映射到内存中
- 写入文件开头,保留文件内容
- 在哪些情况下,我应该保留多个目标,而不是在生成文件中保留一个目标
- 在新运行的 c++ 程序中重新加载文本文件时保留文本文件的内容
- 在 C++ 中剪切文件中的单词和书写,同时保留行号
- 在将数据传递到字符串中时,如何保留文件的格式?
- 如何在不区分大小写的txt文件中找到字符串,并且仍然保留部分大写?在C++中
- 为什么Cocoapods将保留的文件添加到编译中
- 编辑后保留文件的旧时间戳
- 避免重复符号并在头文件中保留代码
- 读取多个文件,并为每个文件保留一组数据
- 在没有文件支持的情况下保留共享内存(Linux/Windows) (boost::interprocess)
- 在不同的文件上有C++类的任何方法都可以将方法定义保留在类中
- Qt库中的mapreduce是否保留输入文件的顺序?
- c++将矩阵风格的文本文件读入二维数组,只保留数字块