使用C+更新二进制文件中的记录+; 我遇到了一个问题,我目前对C++的了解还不够。我在斯特劳斯特鲁普的书中寻找答案,但现在还不能完全理解我做错了什么

使用C+更新二进制文件中的记录+; 我遇到了一个问题,我目前对C++的了解还不够。我在斯特劳斯特鲁普的书中寻找答案,但现在还不能完全理解我做错了什么,c++,binary,fileoutputstream,C++,Binary,Fileoutputstream,这就是本质 我在文件中写入: int i = 1; int j = 2; ofstream ofs("file", ios::binary); ofs.write(as_bytes(i), sizeof(int)); ofs.write(as_bytes(j), sizeof(int)); int i = 0; int j = 0; ifstream ifs("file", ios::binary); ifs.read(as_bytes(i), sizeof(int)); ifs.read(a

这就是本质

我在文件中写入:

int i = 1;
int j = 2;
ofstream ofs("file", ios::binary);
ofs.write(as_bytes(i), sizeof(int));
ofs.write(as_bytes(j), sizeof(int));
int i = 0;
int j = 0;
ifstream ifs("file", ios::binary);
ifs.read(as_bytes(i), sizeof(int));
ifs.read(as_bytes(j), sizeof(int));
cout << i << ' ' << j << endl;
之后,我需要更新第二个值:

int j = 10;
ofstream ofs("file", ios::binary);
ofs.seekp(4, ios::beg);
ofs.write(as_bytes(j), sizeof(int));
当我尝试读取文件时:

int i = 1;
int j = 2;
ofstream ofs("file", ios::binary);
ofs.write(as_bytes(i), sizeof(int));
ofs.write(as_bytes(j), sizeof(int));
int i = 0;
int j = 0;
ifstream ifs("file", ios::binary);
ifs.read(as_bytes(i), sizeof(int));
ifs.read(as_bytes(j), sizeof(int));
cout << i << ' ' << j << endl;
inti=0;
int j=0;
ifstream-ifs(“文件”,ios::binary);
ifs.read(作为字节(i),sizeof(int));
ifs.read(作为字节(j),sizeof(int));

cout默认情况下,文件将被截断(
ios:trunc
,即打开文件进行写入时内容丢失)

对于第二个写入操作,显式地添加标志
ios:in
ios:out
,尽管您只是在写。因此,基本上我会使用以下内容:

ofstream ofs("file", ios::binary | ios::in | ios::out | ios::ate);

这将打开文件,流/文件指针位于文件末尾(
ios::ate
可能是可选的)。

写入文件后是否记得关闭文件?在我看来,这不会影响结果。但是,代码是单独运行的——也就是说,先记录,然后更新,然后开始读取。