【问题标题】:Updating records in a binary file with C++使用 C++ 更新二进制文件中的记录
【发布时间】:2011-10-29 07:48:25
【问题描述】:

我遇到了一个问题,我目前的 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;

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

【问题讨论】:

  • 写完后记得关闭文件吗?
  • 在我看来这不应该影响结果。但是,代码是单独运行的——即先记录,然后更新,然后开始读取。

标签: c++ binary fileoutputstream


【解决方案1】:

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

对于第二次写入操作,明确添加标志ios:inios:out,尽管事实上您只是在写入。所以基本上我会使用以下内容:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 2013-05-02
    • 2017-02-02
    • 1970-01-01
    • 2011-03-31
    • 2011-09-27
    • 1970-01-01
    相关资源
    最近更新 更多