На самом деле проблема заключалась в том, что класс Dog
включает поле QString
, которое ни одна программа не знает, сколько байтов нужно прочитать (строки "asd"
и "asdasdasdasdasdasdsad"
возвращают разные syzeof).Отсюда и ошибка.Это действительно правильно делать что-то вроде:
FILE* file = fopen(filePath.toStdString().c_str(), "rb");
while (!feof(file))
{
int nameSize;
QString name;
int breedSize;
QString breed;
int weigth;
QDate birthDate;
fread(&nameSize, sizeof(int), 1, file);
for (int i = 0; i < nameSize; i++)
{
QChar ch;
fread(&ch, sizeof(QChar), 1, file);
name += ch;
}
fread(&breedSize, sizeof(int), 1, file);
for (int i = 0; i < breedSize; i++)
{
QChar ch;
fread(&ch, sizeof(QChar), 1, file);
breed += ch;
}
fread(&weigth, sizeof(int), 1, file);
fread(&birthDate, sizeof(QDate), 1, file);
_list->emplace_back(new Dog(name, breed, weigth, birthDate));
}
fclose(file);