我正在使用一个小的FAT16文件系统,我想为存储配置信息的indidual XML文件生成CRC值。如果数据发生变化或被破坏,我希望能够检查CRC以确定文件仍处于原始状态。
问题是,如何在不更改文件本身的CRC值的情况下将CRC值放入文件中?我可以想到几个解决方案,但我认为这个问题必须有一个相当标准的解决方案。
答案 0 :(得分:8)
您可以将CRC值附加到文件末尾。然后,在稍后计算CRC值进行检查时,省略最后四个字节。
答案 1 :(得分:5)
定义标题,生成除标题之外的所有内容的CRC,然后将值放在标题中。
答案 2 :(得分:4)
常见的解决方案是使用不同的文件。除了每个文件之外,只有一个文件具有相同的文件名和不同的扩展名。例如:foobar.txt和foobar.txt.md5(或.crc)。
答案 3 :(得分:4)
通信协议中广泛使用的通用解决方案是将CRC字段设置为0,计算CRC然后将其置于0而不是0.检查代码应该执行相反的过程 - 读取CRC,将字段归零,计算CRC并进行比较。
另外,对于文件校验和,我强烈建议使用MD5而不是CRC。
答案 4 :(得分:1)
一种解决方案是使用dsofile.dll为文件添加扩展属性。您可以将CRC值(转换为字符串)保存为扩展文件属性。这样你就不会改变文件的结构。
dsofile.dll是一个ActiveX dll,因此可以从各种语言调用它,但它限制您在Windows上运行。以下是有关dsofile.dll的更多信息:http://support.microsoft.com/kb/224351
答案 5 :(得分:1)
我不会将CRC存储在文件本身中。我会有一个程序使用的单个文件(我将使用XML格式),文件名列表及其相关的CRC值。不需要那么复杂。
答案 6 :(得分:0)
没有办法做到这一点。您可以使文件的前x个字节(CRC使用32位整数,因此4个字节)包含CRC,然后在计算CRC时,您只能考虑在该初始4个字节之后的字节。
另一种解决方案是将CRC包含在文件名中。所以MyFile.Config最终将成为MyFile.CRC1234567.Config。