如何在不使用 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 模式以及它们的作用和含义。
我在使用 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 模式以及它们的作用和含义。