Создание файла в ПК, но сломанные записи
Привет,
Я хочу сделать потоковый файл на ПК с помощью VC++.
Расположение записей выглядит следующим образом:
struct Log_record { char sequence[8]; int index; int cord; char crlf[2]; } Log_record my_rec; char LogBuffer[sizeof(my_rec)*1000]; for (int i = 0;i<1000;i++) { CString s = _T(""); s.Format(_T("%07d"), i+1); Widechartomultibyte(s,...., my_rec.sequence, 8, NULL,NULL); my_rec.index = 0;; my_rec.cord = 0; my_rec.crlf = 0x0d0a; memcpy(&LogBuffer[i*sizeof(my_rec), &my_rec, sizeof(my_rec)); }
Итак, после заполнения Логбуфера 1000 записями и fwrite с опцией "ab" один раз.
Поэтому я ожидаю, что файл со структурой будет выглядеть следующим образом
0000001 ..... CRLF 0000002 ..... CRLF ..... .... 0001000 ...... CRLF
Но иногда,
Это делает файл с последовательностью пробелов или без CRLF.
Это похоже на сломанные пластинки...
В чем причина этой проблемы?
1. простая ошибка кодирования?
2. или любая другая причина ПК?
Пожалуйста, помогите мне.
Заранее спасибо
Что я уже пробовал:
Еще 1 неделя потрачена впустую на эту проблему.
Richard MacCutchan
Почему бы просто не заполнить вашу структуру и не записать каждую запись по одной, а не копировать в буфер журнала? Таким образом, вы можете использовать свой отладчик и точно проверить, что происходит. Кроме того, зачем вам нужна последовательность CRLF для записей фиксированной длины в двоичном файле?
Member 12330615
Для этого требуется последовательное количество записей. Поэтому я использую Logbuffer наполнен 1000 последовательных записей....
CRLF нужны для того, чтобы я видел файл своими глазами...
Richard MacCutchan
Ни то, ни другое не является веской причиной для того, что вы делаете. И вы все еще не показали весь код, так что невозможно догадаться, что вы делаете не так.
Espen Harlinn
Вы не забыли вызвать fclose на ручке перед выходом из программы?
Вы также можете отбросить CString и вызвать sprintf непосредственно в вашем буфере (my_rec. sequence) - тогда вызов Widechartomultibyte не потребуется, так как sprintf работает с char, а не с wchar_t ...
Member 12330615
Этот файл является индексным файлом, так как последовательности очень важны. Так, Logbuffer с 1000 последовательных записей. Но в нескольких транзакциях индексы разбиты (?) и заполнены пробелами, и нет CRLF, когда я вижу файл с помощью "блокнота".