如何在不使用 ios::app 标志的情况下使用 C++ 中的 seekg 和 seekp 附加到文件

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模式打开"output"流。

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