c++ - 使用结构读写二进制文件
问题描述
我正在尝试从二进制文件中读取并将信息转储到结构中。在我从中读取之前,我从结构向量中写入文件。不幸的是,我无法获得新结构来接收文件中的信息。
我尝试在向量和单个结构之间切换。还尝试弄乱文件指针,来回移动它并保持原样,看看这是否是问题所在。使用向量,因为它应该采用无限的值。当我在文件中查找特定结构时,还允许我测试输出应该是什么样子。
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++”打入您最喜欢的搜索引擎,以获得有关如何执行此操作的许多想法。
由于明显的原因,您的代码可能无法正常工作。Astring
可以包含一百万字节的数据。但是您只是将sizeof(string)
字节写入文件。所以你没有写任何读者可以理解的东西。
sizeof(string)
在您的平台上说是 32,但departmentHead
超过 32 个字节。文件的内容怎么可能是正确的?此代码没有尝试将数据序列化为适合写入文件的字节流,该文件是......字节流。
推荐阅读
- jquery - 成功的ajax请求和if语句
- javascript - JsStore中的date_time格式是什么
- javascript - 如何使用 onclick 事件切换反向操作
- python - 正则表达式时间,日期,id
- java - java - 如何创建一个包含随机键和值的映射java?
- sql - 在 SQL+(Oracle) 中显示表之间的关系?
- reactjs - 无法使 react-leaflet 动态更新标记:它给出了 TypeError: Cannot read property 'leafletElement' of undefined
- twilio - 无法使用 SMS twilio 长代码传递给应用程序的单词
- java - 错误:无效的客户端 - 使用 Spring Boot 登录 Apple
- sql - Flink 中对数据流执行 sql 查找的最有效方法