如何在c++中使用seekg和seekp附加到文件,而不使用ios:app标志
How to append to file using seekg and seekp in c++, without using ios::app flag
我在使用seekp和seekg函数时没有得到正确的输出,而另一方面,当我使用ios:app进行附加时,程序运行良好。我应该如何使用seekg()和seekp()函数来追加文件?
#include<iostream.h>
#include<conio.h>
#include<fstream.h>
void main()
{ clrscr();
ofstream out;
out.open("MJ");
char data[100];
cout<<"nEnter data: ";
cin.getline(data,100);
out<<data;
out.close();
ifstream in;
in.open("MJ");
in>>data;
cout<<data;
in.close();
out.open("MJ");
cout<<"nEnter data: ";
cin.getline(data,100);
out.seekp(2);
out<<data;
out.close();
in.open("MJ");
in>>data;
cout<<data<<endl;
getch();
}
当执行out.seekp(2)
时,您只在文件中查找两个字节,然后覆盖超出这两个字节的内容,但这不是问题所在。
问题是,当你重新打开文件时,旧的内容会被破坏,文件会被截断。如果你想手动搜索到最后,你需要在open | in
模式下打开文件以不破坏内容:
out.open("MJ", ios::out | ios::in);
可以在ios::in
模式下打开"输出"流
例如,请参阅本参考资料,其中有一个很好的模式表以及它们的作用和含义。
相关文章:
- I2C 文件描述符上的 I2C 总线可写/可读标志
- 生成文件中隐式规则中的 -c 标志出错
- 文件模式标志"ios::app"是否用于删除文件(如果文件已存在)?
- 使用-L和-L标志与将库文件作为输入进行比较
- 链接库作为 CMAKE 中工具链文件中标志的一部分
- 如何在图像位中设置标志以标记音频文件的结尾
- 是否可以使用 GCC 编译具有特定编译器标志的代码文件的一部分?
- C++ 17:pthread的生成文件标志
- 当自动编译对象文件时,如何使我的makefile使用我的cflags标志
- 尽管使用-i标志,但仍未使用此类文件或目录
- 检查文件是否在 Makefile 中使用某些标志进行编译
- 用错误的标志顺序编译后,是否删除*.cpp文件
- 制作文件后启用cmake选项/标志
- 标志以将IPDB和IOBJ文件从链接时间代码生成优化(LTCG)移动
- C 11 -Chrono文件的编译器标志找不到
- 覆盖单个文件的编译标志
- 重构具有不同标志的对象文件的makefile
- 如何在更改生成文件标志时强制重新编译
- NDK文件标志中的Android.mk
- make OBJECT文件标志不工作