Что может привести к сбоям при добавлении данных в файл? - PullRequest
0 голосов
/ 04 июня 2011

У меня есть программа, которая отвечает за сбор данных из системы сбора данных и добавление этих данных в очень большой (размер> 4 ГБ) двоичный файл. Перед добавлением данных программа должна проверить заголовок этого файла, чтобы убедиться, что метаданные в файле соответствуют собранным. Для этого я открываю файл следующим образом:

data_file = fopen (имя_файла, "rb +");

Затем я ищу начало файла, чтобы проверить заголовок. Когда это сделано, я ищу в конец файла следующим образом:

_fseeki64 (файл_данных, _filelengthi64 (файл_данных), SEEK_SET);

На этом этапе я записываю данные, которые были собраны с помощью fwrite (). Я внимательно проверяю возвращаемые значения из всех функций ввода / вывода.

Один из компьютеров (Windows 7 64 бит), на которых мы тестировали эту программу, периодически показывает состояние, при котором данные, по-видимому, были записаны в файл, но при этом не изменяется ни время последнего изменения файла, ни его размер. Если какой-либо из вызовов fopen (), fseek () или fwrite () завершится неудачно, моя программа сгенерирует исключение, которое приведет к прерыванию процесса сбора данных и регистрации ошибки. На этой машине ни одна из этих сбоев, кажется, не происходит. Что еще более загадочно, так это то, что, если в файловой системе хоста установлена ​​точка восстановления, проблема исчезает только для повторного появления в будущем.

Мы пытались воспроизвести эту проблему на других машинах (32-разрядная операционная система Vista), но не смогли воспроизвести проблему (это не обязательно означает что-либо, поскольку проблема с самого начала носит прерывистый характер.

Кто-нибудь еще сталкивался с чем-нибудь подобным этому? Есть ли потенциальное лекарство?

Дополнительная информация

Я обнаружил, что ошибка возникает при вызове fflush () для файла и что ошибка win32, возвращаемая GetLastError (), равна 665 (ERROR_FILE_SYSTEM_LIMITATION). Поиск в Google по этой ошибке приводит к куче отчетов, связанных с «экстентами» для файлов сервера SQL. Я подозреваю, что существует некоторый ресурс журналирования, о котором сообщает файловая система, и это потому, что мы увеличиваем большой файл, открывая его, добавляя кусок данных и закрывая его. Сейчас я ищу понимания относительно этой конкретной ошибки с надеждой найти подходящее средство.

1 Ответ

0 голосов
/ 09 августа 2012

Ошибка добавления файла из-за ограничения фрагментации файловой системы.На вопрос был дан ответ в Какие факторы могут привести к ошибке Win32 665 (ограничение файловой системы)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...