繁体   English   中英

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM