2008-10-28 47 views
8

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

问题是,如何将CRC值放入文件中,而不更改文件本身的CRC值?我可以考虑一些解决方案,但我认为这个问题必须有一个相当标准的解决方案。

回答

8

您可以将CRC值附加到文件末尾。然后,在稍后计算CRC值以供检查时,省略最后四个字节。

5

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

0

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

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

1

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

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

+0

我相信dsofile.dll只适用于'结构化存储'文件。 – 2008-10-29 19:50:34

4

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

1

我不会在CRC存储在文件本身英寸我将有一个文件(我将使用XML格式),您的程序使用的文件名和它们相关的CRC值列表。没有必要使它变得复杂。

4

在通信协议中广泛使用的常见解决方案是将CRC字段设置为0,计算CRC,然后将其放置为0而不是0。检查代码应执行相反的过程 - 读取CRC,字段,计算CRC并进行比较。

此外,对于文件校验和,我强烈建议使用MD5而不是CRC。