编写和读取二进制文件时调试不匹配

时间:2018-02-02 22:25:15

标签: c++ binaryfiles read-write

我有两个应用程序,一个读者和一个作家。

我正在撰写和阅读的数据是本课程的成员:

ProcessBean<?>

struct和enum是:

class MyClass
{
public:
   MyClass(){}
   ~MyClass(){}
public:
   //Getters and setters are removed for simplicity
   void write(std::ofstream& ofile);
   void read(std::ifstream& file);
private:
   Aenum a= Aenum_0;

   double b= 0.0;   
   double c= 0.0;
   double d= 0.0;
   double e= 0.0;

   char charArr1[5];
   char charArr2[5];
   char charArr3[5];
   char charArr4[10];

   date_and_time time;
};

写入功能:

struct date{
       int day = 1;
       int month = 1;
       int year = 2017;
    };
    struct hhmmss{
       int hours = 1;
       int minutes = 1;
       int seconds = 1;
    };
    struct date_and_time {
       date d;
       hhmmss t;
    };

    enum Aenum = {Aenum_0, Aenum_1, Aenum_2};

读取功能:

void MyClass::write(std::ofstream& ofile){
   ofile.write((char*)&a, sizeof(int));                                      
   ofile.write((char*)&b, sizeof(double));                 
   ofile.write((char*)&c, sizeof(double));       
   ofile.write((char*)&d, sizeof(double));                     
   ofile.write((char*)&e, sizeof(double));                 
   ofile.write(&charArr1[0], sizeof(char)*5);   
   ofile.write(&charArr2[0], sizeof(char)*5); 
   ofile.write(&charArr3[0], sizeof(char)*5); 
   ofile.write(&charArr4[0], sizeof(char)*10);     
   ofile.write((char*)&time, sizeof(date_and_time));        
}

然后在我的作家应用程序中我这样做:

void MyClass::read(std::ifstream& file){ 
   file.read((char*)&a, sizeof(int));   
   file.read((char*)&b, sizeof(double));                              
   file.read((char*)&d, sizeof(double));                       
   file.read((char*)&d, sizeof(double));                       
   file.read((char*)&e, sizeof(double));                              
   file.read(charArr1, sizeof(char)*5);          
   file.read(charArr2, sizeof(char)*5);             
   file.read(charArr3, sizeof(char)*5);        
   file.read(charArr4, sizeof(char)*10);
   file.read((char*)&time, sizeof(date_and_time));
}

在读者中我这样做:

bool writeToBinaryFile(std::vector<myClass>& myClassCollection, const std::string& outputPath){

   std::ofstream ofile;
   ofile.open(outputPath);
   if (!ofile.is_open())
      return false;

   date_and_time dtnow = getDateAndTimeNow();
   ofile.write((char*)&dtnow, sizeof(date_and_time));                    

   int numberOfmyClass = myClassCollection.size();
   ofile.write((char*)&numberOfmyClass, sizeof(int));

   for (int i = 0; i < myClassCollection.size(); i++)
      myClassCollection[i].write(ofile);

   ofile.close();
   return true;
}

我知道类成员中的数据是完整的。我有另一个功能,我写入ASCII文件,没有丢失的数据。

当我读取二进制文件时,我得到了该类前15位(200+)成员的正确数据。然后突然我正在阅读的值是 garbage ,好像有些字节不应该存在。

所以我要问的是;我做的事情显然是错的吗?如果没有,调试这样一个问题的最佳方法是什么?

0 个答案:

没有答案