使用C ++更新二进制文件中的记录

时间:2011-08-17 21:54:41

标签: c++ binary fileoutputstream

我遇到了一个问题,我目前对C ++的了解并不足以解决它。我在Stroustrup的书中寻找答案,但现在不完全理解我为自己做错了什么。

所以本质。

我写信给文件:

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 j = 10;
ofstream ofs("file", ios::binary);
ofs.seekp(4, ios::beg);
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;

事实证明我失去了第一个价值。我究竟做错了什么?它为什么会消失?

1 个答案:

答案 0 :(得分:3)

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

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

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

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