Question

Je travaille avec un petit système de fichiers FAT16 et je souhaite générer des valeurs CRC pour des fichiers XML individuels stockant des informations de configuration. Si les données changent ou sont corrompues, je souhaite pouvoir vérifier le CRC pour déterminer si le fichier est toujours dans son état d'origine.

La question est de savoir comment insérer la valeur CRC dans le fichier sans modifier la valeur CRC du fichier lui-même. Je peux penser à quelques solutions, mais je pense qu’il doit exister une solution assez standard pour résoudre ce problème.

Était-ce utile?

La solution

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.

Autres conseils

Définissez un en-tête, générez le CRC de tout sauf l'en-tête, puis placez la valeur dans l'en-tête.

Une solution courante consiste simplement à utiliser des fichiers différents. A côté de chaque fichier, vous devez simplement 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).

La solution couramment utilisée dans les protocoles de communication consiste à définir le champ CRC sur 0, à calculer le CRC, puis à le placer à la place du 0. Le code de contrôle doit effectuer le processus inverse - lire le CRC, mettre à zéro le champ , calculer le CRC et comparer.

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

Une solution consisterait à 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 étendu. Ainsi, vous ne modifiez pas la structure du fichier.

dsofile.dll est une dll ActiveX et peut donc être appelée à partir de différentes langues, mais elle vous oblige à exécuter Windows. Voici plus d'informations sur dsofile.dll: http://support.microsoft.com/kb/224351

Je ne stockerais pas le CRC dans le fichier lui-même. J'aurais un seul fichier (j'utiliserais le format XML) utilisé par votre programme, avec une liste de noms de fichiers et leurs valeurs CRC associées. Inutile de compliquer les choses.

Il n'y a aucun moyen de faire cela. Vous pouvez créer les x premiers octets (le CRC utilise un entier de 32 bits, donc 4 octets) du fichier contient le CRC, puis lors du calcul de votre CRC, vous ne pouvez considérer que les octets qui suivent les 4 octets initiaux.

Une autre solution consisterait à inclure le CRC dans le nom du fichier. Ainsi, MyFile.Config deviendrait MyFile.CRC1234567.Config.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top