Member 12330615 Ответов: 1

Как проверить причины различных значений одной записи файла?


В моем коде VC++ ;

Процесс а записывает запись в файл, а процесс Б читает ту же запись файла.
Структура записи выглядит следующим образом:

структура IDX_HeaderLayout{


char today[8];
чар logfile_seq[4];
чар log_seq[6];
инт start_no;
инт end_no;
ULONGLONG current_logsize;
ULONGLONG current_idxsize;
инт process_run[3];
инт process_link[3];
int last_sdata_no[3]; / / < - - - - - эта точка
char last_time[3][12];
char crlf[2];
}

Очень странное событие произошло, что;
Когда процесс записывает запись в файл, а процесс B читает ее, но значения полей записи - особенно полей last_data_no-различны между двумя процессами.
Это мой первый опыт за всю карьеру.
Я проверил исходный код, структуру и файловую систему, каталог ... но так и не удалось выяснить, в чем именно причина....

Пожалуйста, помогите или посоветуйте мне.

Заранее спасибо.

Что я уже пробовал:

Один день впустую потратил мое сегодняшнее время.Но потерпел неудачу. Теперь я ничего не знаю....

OriginalGriff

Как А это пишет, Как б это читает, и как вы можете сказать, что это другое?

1 Ответов

Рейтинг:
12

Richard MacCutchan

Это продолжение вашего предыдущего вопроса: Создание файла в ПК, но сломанные записи[^]. Написание структуры фиксированной длины должно просто работать (при условии, что вы делаете это правильно). И то же самое читаю в ответ. Я уже предположил, что, поскольку это двоичный файл, добавление последовательности CR?F в конце каждого резорда не имеет никакой цели. Все, что вам нужно, это что-то вроде:

// to write a single record
fwrite(&logRecord, sizeof(logRecord), 1, handle);

// to read a record
fread(&logRecord, sizeof(logRecord), 1, handle);

Убедитесь, что вы звоните fclose после записи всех записей.


Member 12330615

Пропуск параметра size при использовании sprintf_s не имеет ошибки компиляции,но делает ошибку запуска.
char a[8];
sprintf(a," %07d", i); // это не имеет ошибки компиляции. но это вызывает странный результат.

Richard MacCutchan

И вы хотите, чтобы я угадал, что "это вызывает странный результат" значит?