如何在c++中使用seekg和seekp附加到文件,而不使用ios:app标志

How to append to file using seekg and seekp in c++, without using ios::app flag

本文关键字:文件 标志 ios app c++ seekg seekp      更新时间:2023-10-16

我在使用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模式下打开"输出"流

例如,请参阅本参考资料,其中有一个很好的模式表以及它们的作用和含义。