CRC проверяет файлы - PullRequest
       9

CRC проверяет файлы

8 голосов
/ 29 октября 2008

Я работаю с небольшой файловой системой FAT16 и хочу сгенерировать значения CRC для отдельных файлов XML, в которых хранится информация о конфигурации. В случае изменения или повреждения данных я хочу иметь возможность проверить CRC, чтобы определить, что файл все еще находится в исходном состоянии.

Вопрос в том, как поместить значение CRC в файл, не изменяя значение CRC самого файла? Я могу придумать пару решений, но я думаю, что для этой проблемы должно быть достаточно стандартное решение.

Ответы [ 7 ]

8 голосов
/ 29 октября 2008

Вы можете добавить значение CRC в конец файла. Затем при последующем вычислении значения CRC для проверки пропустите последние четыре байта.

5 голосов
/ 29 октября 2008

Определите заголовок, сгенерируйте CRC всего, кроме заголовка, затем поместите значение в заголовок.

4 голосов
/ 29 октября 2008

Общее решение, которое широко используется в протоколах связи, состоит в том, чтобы установить поле CRC в 0, вычислить CRC и затем поместить его вместо 0. Проверочный код должен выполнить обратный процесс - прочитать CRC, обнулить поле Рассчитайте CRC и сравните.

Кроме того, для контрольной суммы файла я настоятельно рекомендую использовать MD5 вместо CRC.

4 голосов
/ 29 октября 2008

Обычное решение - просто использовать разные файлы. Рядом с каждым файлом просто есть файл с тем же именем и другим расширением. Например: foobar.txt и foobar.txt.md5 (или .crc).

1 голос
/ 29 октября 2008

Я бы не стал хранить CRC в самом файле. У меня был бы один файл (я бы использовал формат XML), который использует ваша программа, со списком имен файлов и связанных с ними значений CRC. Не нужно усложнять.

1 голос
/ 29 октября 2008

Одним из решений будет использование dsofile.dll для добавления расширенных свойств в ваши файлы. Вы можете сохранить значение CRC (преобразованное в строку) как расширенное свойство файла. Таким образом, вы не меняете структуру файла.

dsofile.dll - это ActiveX dll, поэтому ее можно вызывать на разных языках, однако она ограничивает вас работой в Windows. Вот больше информации о dsofile.dll: http://support.microsoft.com/kb/224351

0 голосов
/ 29 октября 2008

Нет способа сделать это. Вы можете сделать первые x байтов (CRC использует 32-битное целое число, поэтому 4 байта) файла содержат CRC, а затем при расчете CRC вы можете учитывать только те байты, которые идут после этих начальных 4 байтов.

Другим решением было бы включить CRC в имя файла. Таким образом, MyFile.Config окажется MyFile.CRC1234567.Config.

...