首页 > 解决方案 > 使用结构读写二进制文件

问题描述

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

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

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){

        }


//...

标签: c++binaryfiles

解决方案


文件是字节流。如果您想将某些内容写入文件并可靠地读回,则需要在字节级别定义文件的内容。查看一些二进制文件格式(如 GIF)的规范,了解这样的规范是什么样的。然后编写代码来转换你的类实例和一大块字节。

否则,它将被击中或错过,并且经常错过。将“序列化 C++”打入您最喜欢的搜索引擎,以获得有关如何执行此操作的许多想法。

由于明显的原因,您的代码可能无法正常工作。Astring可以包含一百万字节的数据。但是您只是将sizeof(string)字节写入文件。所以你没有写任何读者可以理解的东西。

sizeof(string)在您的平台上说是 32,但departmentHead超过 32 个字节。文件的内容怎么可能是正确的?此代码没有尝试将数据序列化为适合写入文件的字节流,该文件是......字节流。


推荐阅读