将二进制文件读取到struct c ++

时间:2014-12-08 17:26:48

标签: c++ struct binaryfiles

我有一个程序,它从/向二进制文件读/写记录,存储记录,然后执行搜索,排序,修改和打印等操作。我不能使用结构数组作为我的struct变量,因此用户可以输入任意数量的记录。我在阅读文件时遇到一些麻烦,这可能是由于我对read()函数的实际工作原理缺乏了解。我按字段写入文件字段并以相同的方式写入它们,以便它们相互镜像。

这些是我的结构:

struct Name{
    char first[10];
    char middle[10];
    char last[10];
};
struct Date{
    int day;
    int month;
    int year;
};
struct Grade{
    int midterm;
    int final;
    int finalGrade;
    float gpa;
};
struct Rank{        //ordered based on GPA
        int rank;
};
struct Student{
    int id;
    Name name;
    Date enroll;
    Date graduate;
    Grade grade;
    Rank rank;
}student;

没有看到使用这些写入的任何问题(由于填充问题,所有这些都是逐字段写的,大多数都在这里省略):

out.write(student.name.last, sizeof(student.name.last));
out.write(reinterpret_cast<char*>(&student.enroll.month), sizeof(student.enroll.month));

 //when I try to iterate through the file to read, I did this:
out.seekg(0);
while(!out.eof){
   out.read(student.name.last, sizeof(student.name.last));
   out.read(reinterpret_cast<char*>(&student.enroll.month), sizeof(student.enroll.month));
}

这是通过一个无限循环发送它,我不明白为什么会这样。在二进制文件中,eof“character”是否存在差异,它只是从未找到它,因为它真的在寻找其他东西?我只是读到使用这样的循环会导致问题(我切换到保持正在编写的记录数量的运行计数并设置for循环。

for(int i = 0; i < record_count; i++){//read}

我想避免这种方法。

就读取功能而言,它是如何工作的?我的印象是每个字段都进行了重新分配,并且每次读取student.name/whatever字段并打印出每条记录的信息时都要处理整个文件,但它似乎没有这样做,或者我错了。任何见解将不胜感激。

0 个答案:

没有答案