用c++更新二进制文件中的记录
Updating records in a binary file with C++
我遇到了一个问题,我目前的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;
我失去了第一个值。我做错了什么?它为什么消失了?
默认情况下,文件将被截断(ios:trunc
,即在打开文件进行写入时内容丢失)。
对于第二次写操作显式地添加标志ios:in
和ios:out
,尽管事实上你只写。因此,我将使用以下代码:
ofstream ofs("file", ios::binary | ios::in | ios::out | ios::ate);
这应该打开文件,流/文件指针在文件的末尾(ios::ate
可能是可选的)。
相关文章:
- 正在读取二进制文件(is_open)
- 在C++中将类(带有Vector成员)保存为二进制文件
- 如何从二进制文件中读取字符串
- 保存/加载大量短数组到二进制文件
- 从二进制文件中读取整数数组
- Android 在编译二进制文件时重建静态库
- 在 C++ 中将双精度变量写入二进制文件
- clang 的 libFuzzer 可以在同一二进制文件中测试超过 1 个 API 吗?
- C++:实际上不是从二进制文件中读取
- 如何从二进制文件中的给定符号中获取调用程序图
- 在二进制文件中删除记录
- 使用结构在二进制文件中创建多个记录
- 程序写入记录在 C++ 的二进制文件中两次
- 创建一个二进制文件,向其中添加信息,并从中读取所有记录(电话簿)
- 用c++更新二进制文件中的记录
- 如何使用seekg与字符串输入从二进制文件中获取记录
- 更新二进制文件中的学生记录,同时删除以前的数据
- 在二进制文件中添加特定的记录
- 不能将记录附加到二进制文件中
- 从二进制文件中删除记录