使用结构读取和写入二进制文件
Reading and writing binary files using structures
我正在尝试从二进制文件中读取并将信息转储到结构中。在我从中读取之前,我从结构向量写入文件。不幸的是,我无法获得新结构以从文件中接收信息。
我尝试在向量和单个结构之间切换。还尝试弄乱文件指针,来回移动它,并保持原样,看看这是否是问题所在。使用向量,因为它应该取无限的值。还允许我测试在文件中查找特定结构时输出的外观。
struct Department{
string departmentName;
string departmentHead;
int departmentID;
double departmentSalary;
};
int main()
{
//...
vector<Employee> emp;
vector<Department> dept;
vector<int> empID;
vector<int> deptID;
if(response==1){
addDepartment(dept, deptID);
fstream output_file("departments.dat", ios::in|ios::out|ios::binary);
output_file.write(reinterpret_cast<char *>(&dept[counter-1]), sizeof(dept[counter-1]));
output_file.close();
}
else if(response==2){
addEmployee(emp, dept, empID);
}
else if(response==3){
Department master;
int size=dept.size();
int index;
cout << "Which record to EDIT:n";
cout << "Please choose one of the following... 1"<< " to " << size << " : ";
cin >> index;
fstream input_file("departments.dat", ios::in|ios::out|ios::binary);
input_file.seekg((index-1) * sizeof(master), ios::beg);
input_file.read(reinterpret_cast<char *>(&master), sizeof(master));
input_file.close();
cout<< "n" << master.departmentName;
}
else if(response==4){
}
//...
文件是字节流。如果要将某些内容写入文件并可靠地读回,则需要在字节级别定义文件的内容。查看一些二进制文件格式(例如 GIF)的规范,以了解此类规范的外观。然后编写代码以与类实例和字节块相互转换。
否则,它将被击中或错过,而且经常被错过。将"序列化C++"打入您最喜欢的搜索引擎,以获取有关如何执行此操作的许多想法。
由于显而易见的原因,您的代码不可能工作。一个string
可以包含一百万字节的数据。但是您只向文件写入sizeof(string)
字节。所以你没有写任何读者可以理解的东西。
假设sizeof(string)
在您的平台上是 32,但departmentHead
超过 32 字节。文件的内容怎么可能是正确的?此代码不尝试将数据序列化为适合写入文件的字节流,该文件是...字节流。
相关文章:
- 如何在 c++ 中将二进制文件读取为字符串
- 从二进制文件读取到数组:前面的任意数字
- 提升二进制文件读取错误不支持的版本
- 无法将二进制文件读取到 std::vector<std::byte> 中C++
- 提升序列化在从二进制文件读取时引发异常
- 从二进制文件 C++ 读取的字符串数组写入
- 将二进制文件读取到 std::vector<bool>
- 将fortran生成的二进制文件读取到C++中的带符号整数数组中
- 将从二进制文件读取的字符串转换为整数
- 从/到C 的二进制文件读取和写作整数
- 通过将结构信息从二进制文件读取到数组中,然后返回到文件C
- 将 int 的二进制文件读取到字符串 c++
- 将结构从二进制文件读取到链表,导致无限循环
- 将二进制文件读取到向量元素的地址中
- c++从二进制文件读取/写入类
- Python:将二进制文件读取到一个结构中,然后拆包
- 从二进制文件读取/写入十六进制字节
- 简单的 C++ 二进制文件读取
- 从二进制文件 c++ 读取 16 位整数
- 如何优化c++二进制文件读取