fread_s читает неправильное количество байтов

Я читаю файл коллекции (около 20 небольших файлов в одном) с fread_s и содержание пишется в struct, подобно 99% время, когда он читает данные правильно, но один раз, при всегда одной и той же позиции, он, кажется, игнорирует размер байта параметра размера элемента и просто читает 500 или около того байтов, пока не прервется и не сообщит feof ошибка. Дело в том, что он даже не записывает последние три байта int в структуру.

Когда я уберу чеки и продолжу читать, он снова будет читать нормально, как будто ничего не произошло.

Я заметил, что _Placeholder переменная в указателе файла меняется на другое значение, а затем обратно, но я думаю, это просто eof ошибка при загрузке.

#pragma pack(push, 1)
struct fileHeader {
__int32 typeID;
bool isGFX;
char filename[8];
__int32 offset;
};
#pragma pack(pop)

#define HEADERSIZE 68
#define FILEHEADERSIZE 17

....
FILE *file;
fopen_s(&file, filename.c_str(), "r");

for (int i = 0; i < header.files - 1; i++) {
fseek(file, HEADERSIZE + i * FILEHEADERSIZE, 0);

fileHeader headerFile;
memset(&headerFile, 0, FILEHEADERSIZE);

int oldPointer = ftell(file); //118
int d = fread_s(&headerFile, FILEHEADERSIZE, FILEHEADERSIZE, 1, file); //returns 0
int newPointer = ftell(file); //630

int e = errno; //0
int ea = ferror(file); //0
int ef = feof(file); //1

//getting used here in a function
}
headerFile = {typeID=17 isGFX=true filename=0x00fefd05 "CURSORR" offset = 164} - offset should be 6820

0

Решение

Как сказал в комментариях Джонатан Леффлер, ошибка заключалась в том, что я не читал в двоичном режиме. простое изменение fopen_s(&file, filename.c_str(), "r"); в fopen_s(&file, filename.c_str(), "rb"); исправил проблему.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]