2

使用 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();

}
4

1 回答 1

2

当你这样做时,out.seekp(2)你只在文件中寻找两个字节,然后覆盖除此之外的任何内容,但这不是问题。

问题是当您重新打开文件时,旧内容被破坏,文件被截断。open | in如果要手动搜索到最后,则需要以不破坏内容的模式打开文件:

out.open("MJ", ios::out | ios::in);

可以在ios::in模式下打开“输出”流。

参见例如this reference,它有一个很好的模式表以及它们的作用和含义。

于 2016-04-05T06:21:43.987 回答