2008-10-28 13 views
8

Je travaille avec un petit système de fichiers FAT16 et je souhaite générer des valeurs CRC pour des fichiers XML indiduels qui stockent des informations de configuration. Au cas où les données changent ou sont corrompues, je veux être en mesure de vérifier le CRC pour déterminer que le fichier est toujours dans son état d'origine.Le CRC vérifie les fichiers

La question est, comment puis-je mettre la valeur CRC dans le fichier, sans changer la valeur CRC du fichier lui-même? Je peux penser à quelques solutions, mais je pense qu'il doit y avoir une solution assez standard à ce problème.

Répondre

8

Vous pouvez ajouter la valeur CRC à la fin du fichier. Ensuite, lors du calcul de la valeur CRC ultérieurement pour vérification, omettez les quatre derniers octets.

5

Définir un en-tête, le CRC de générer tout sauf l'en-tête, puis mettre la valeur dans l'en-tête.

0

Il n'y a aucun moyen de le faire. Vous pourriez faire les premiers x octets (CRC utilise un entier de 32 bits, donc 4 octets) du fichier contiennent le CRC, puis lors du calcul de votre CRC, vous ne pouvez considérer que les octets qui viennent après les 4 premiers octets.

Une autre solution consisterait à inclure le CRC dans le nom de fichier. Donc MyFile.Config finirait par être MyFile.CRC1234567.Config.

1

Une solution serait d'utiliser Dsofile.dll pour ajouter des propriétés étendues à vos fichiers. Vous pouvez enregistrer la valeur CRC (convertie en chaîne) en tant que propriété de fichier étendue. De cette façon, vous ne changez pas la structure du fichier.

Dsofile.dll est un dll ActiveX de sorte qu'il peut être appelé à partir de différentes langues, mais il vous confine à l'exécution sous Windows. Voici plus d'informations sur Dsofile.dll: http://support.microsoft.com/kb/224351

+0

Je crois que dsofile.dll ne fonctionne qu'avec les fichiers 'Structured Storage'. –

4

Une solution commune est d'utiliser simplement des fichiers différents. À côté de chaque fichier, il suffit d'avoir un fichier avec le même nom de fichier avec une extension différente. Par exemple: foobar.txt et foobar.txt.md5 (ou .crc).

1

Je ne stockerais pas le CRC dans le fichier lui-même. J'aurais un seul fichier (j'utiliserais le format XML) que votre programme utilise, avec une liste de noms de fichiers et leurs valeurs CRC associées. Pas besoin de le rendre si compliqué.

4

La solution commune qui est largement utilisée dans les protocoles de communication est de mettre le champ CRC à 0, de calculer le CRC et de le placer à la place du 0. Le code de contrôle devrait faire le processus inverse. champ, calculer le CRC et comparer.

En outre, pour une somme de contrôle de fichier, je recommande fortement MD5 au lieu de CRC.

Questions connexes