Почему сохранение в файл не работает должным образом? - PullRequest
0 голосов
/ 20 марта 2019

У меня есть такая структура:

struct Employee
{
   char VarOne[50];        
   unsigned int VarTwo;      
   double VarThree[4];           
}

Затем я заполняю динамический массив этой структуры:

 Employee* MyArray = new Employee[TheSize]; // Sorry I forgot to mention TheSize is = 5 constant

Затем я пытаюсь записать массив в двоичном режиме в файл:

   // write as binary
   fstream OutFileBin;
   OutFileBin.open("Employee.dat", ios::binary | ios::out);
   OutFileBin.write(reinterpret_cast<char *>(&MyArray), TheSize * sizeof(Employee));
   OutFileBin.close();

Но когда я читаю файл в двоичном режиме, он терпит неудачу, и данные являются ненужными:

   // read as binary
   fstream InFilebin;
   InFilebin.open("Employee.dat", ios::binary | ios::in);
   Employee NewArray[TheSize]; // sorry I forgot to mention TheSize is = 5 constant
   InFilebin.read(reinterpret_cast<char *>(&NewArray), TheSize * sizeof(Employee));

Что я делаю не так?

1 Ответ

3 голосов
/ 20 марта 2019

Линия

OutFileBin.write(reinterpret_cast<char *>(&MyArray), TheSize * sizeof(Employee));

не хороша.Вы не хотите обрабатывать &MyArray, как будто он хранит объекты типа Employee.Это должно быть просто MyArray.

OutFileBin.write(reinterpret_cast<char*>(MyArray), TheSize * sizeof(Employee));

Кроме того,

Employee NewArray[TheSize];

не является стандартным C ++, если TheSize не является постоянной времени компиляции.Измените его на

Employee* NewArray = new Employee[TheSize];

и следующую строку на

InFilebin.read(reinterpret_cast<char *>(NewArray), TheSize * sizeof(Employee));
...