У меня есть файл, первые 64 байта которого:
0x00: 01 00 00 10 00 00 00 20 00 00 FF 03 00 00 00 10
0x10: 00 00 00 10 00 00 FF 03 00 00 00 10 00 00 FF 03
0x20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Когда я читаю файл (режим чтения и записи) в позиции 26 для 4 байтов, я получаю 0, а в следующий раз (в позиции 30) я получаю правильно 4096.
Код:
// read LastDirectoryBlockStartByte...
seekg(26);
char * pCUIBuffer = new char[4];
read(pCUIBuffer, 4);
const unsigned int x1 = gcount ();
const unsigned int LastDirectoryBlockStartByte = *(unsigned int *)pCUIBuffer;
// read LastDirectoryBlockNumberItems...
seekg(30);
read(pCUIBuffer, 4);
const unsigned int x2 = gcount ();
const unsigned int LastDirectoryBlockNumberItems = *(unsigned int *)pCUIBuffer;
С помощью gcount () я проверил, что байты прочитаны - и это было правильно оба раза 4.
Я понятия не имею, чтобы отладить его.
---------- РЕДАКТИРОВАТЬ ----------
Когда я использую следующий код (с некоторыми заглушками перед ним), он читается правильно:
char * pCUIBuffer = new char[4];
seekg(26);
read(pCUIBuffer, 4);
const unsigned int x1 = gcount ();
seekg(26);
read(pCUIBuffer, 4);
const unsigned int x2 = gcount ();
const unsigned int LastDirectoryBlockStartByte = *(unsigned int *)pCUIBuffer;
// read LastDirectoryBlockNumberItems...
seekg(30);
read(pCUIBuffer, 4);
const unsigned int x3 = gcount ();
const unsigned int LastDirectoryBlockNumberItems = *(unsigned int *)pCUIBuffer;
Сложность состоит в том, что код стоит в начале метода. И «ложное прочитанное значение», очевидно, не имеет ничего общего с перечисленным кодом. Может быть, есть трюк со сбросом или синхронизацией (но оба я пытался ...) или что-то еще ...