我在使用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
模式下打开"输出"流
例如,请参阅本参考资料,其中有一个很好的模式表以及它们的作用和含义。