8

我正在使用一个小型 FAT16 文件系统,我想为存储配置信息的单个 XML 文件生成 CRC 值。如果数据更改或损坏,我希望能够检查 CRC 以确定文件仍处于原始状态。

问题是,如何在不改变文件本身的 CRC 值的情况下,将 CRC 值放入文件中?我可以想到几个解决方案,但我认为这个问题必须有一个相当标准的解决方案。

4

7 回答 7

8

您可以将 CRC 值附加到文件的末尾。然后,在稍后计算 CRC 值进行校验时,省略最后四个字节。

于 2008-10-28T23:13:39.137 回答
5

定义一个标头,生成除标头之外的所有内容的 CRC,然后将值放入标头中。

于 2008-10-28T23:14:17.263 回答
4

一个常见的解决方案是只使用不同的文件。每个文件旁边只有一个文件名相同但扩展名不同的文件。例如:foobar.txt 和 foobar.txt.md5(或 .crc)。

于 2008-10-28T23:39:22.767 回答
4

通信协议中广泛使用的常见解决方案是将 CRC 字段设置为 0,计算 CRC,然后将其替换为 0。校验码应该做相反的过程 - 读取 CRC,将字段归零,计算CRC 和比较。

此外,对于文件校验和,我强烈推荐 MD5 而不是 CRC。

于 2008-10-29T00:41:54.450 回答
1

一种解决方案是使用 dsofile.dll 将扩展属性添加到您的文件中。您可以将 CRC 值(转换为字符串)保存为扩展文件属性。这样你就不会改变文件的结构。

dsofile.dll 是一个 ActiveX dll,因此可以从各种语言中调用它,但是它限制了您在 Windows 上运行。以下是有关 dsofile.dll 的更多信息:http: //support.microsoft.com/kb/224351

于 2008-10-28T23:19:40.047 回答
1

我不会将 CRC 存储在文件本身中。我将有一个您的程序使用的文件(我将使用 XML 格式),其中包含文件名列表及其关联的 CRC 值。没必要把它弄得那么复杂。

于 2008-10-28T23:51:12.137 回答
0

没有办法做到这一点。您可以使文件的前 x 个字节(CRC 使用 32 位整数,因此 4 个字节)包含 CRC,然后在计算您的 CRC 时,您只能考虑最初 4 个字节之后的字节。

另一种解决方案是将 CRC 包含在文件名中。所以 MyFile.Config 最终会成为 MyFile.CRC1234567.Config。

于 2008-10-28T23:15:08.947 回答