使用结构读取和写入二进制文件

Reading and writing binary files using structures

本文关键字:二进制文件 读取 结构      更新时间:2023-10-16

我正在尝试从二进制文件中读取并将信息转储到结构中。在我从中读取之前,我从结构向量写入文件。不幸的是,我无法获得新结构以从文件中接收信息。

我尝试在向量和单个结构之间切换。还尝试弄乱文件指针,来回移动它,并保持原样,看看这是否是问题所在。使用向量,因为它应该取无限的值。还允许我测试在文件中查找特定结构时输出的外观。

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 字节。文件的内容怎么可能是正确的?此代码不尝试将数据序列化为适合写入文件的字节流,该文件是...字节流。