2008-10-28 9 views
8

Ich arbeite mit einem kleinen FAT16-Dateisystem, und ich möchte CRC-Werte für einzelne XML-Dateien generieren, die Konfigurationsinformationen speichern. Wenn sich die Daten ändern oder beschädigt sind, möchte ich in der Lage sein, die CRC zu überprüfen, um festzustellen, dass die Datei noch in ihrem ursprünglichen Zustand ist.CRC prüft auf Dateien

Die Frage ist, wie setze ich den CRC-Wert in die Datei, ohne den CRC-Wert der Datei selbst zu ändern? Ich kann mir ein paar Lösungen vorstellen, aber ich denke, es muss eine ziemlich standardisierte Lösung für dieses Problem geben.

Antwort

8

Sie könnten den CRC-Wert an das Ende der Datei anhängen. Wenn dann später der CRC-Wert zum Prüfen berechnet wird, lassen Sie die letzten vier Bytes weg.

5

Definieren Sie einen Header, generieren Sie den CRC von allem außer dem Header und geben Sie den Wert in den Header ein.

0

Es gibt keine Möglichkeit, dies zu tun. Sie könnten die ersten x-Bytes (CRC verwendet eine 32-Bit-Ganzzahl, also 4 Bytes) der Datei enthalten die CRC, und dann bei der Berechnung Ihrer CRC, könnten Sie nur die Bytes, die nach diesen ersten 4 Bytes kommen.

Eine andere Lösung wäre, die CRC in den Dateinamen aufzunehmen. Also MyFile.Config würde MyFile.CRC1234567.Config enden.

1

Eine Lösung wäre, dsofile.dll zu verwenden, um Ihren Dateien erweiterte Eigenschaften hinzuzufügen. Sie können den CRC-Wert (in eine Zeichenfolge konvertiert) als erweiterte Dateieigenschaft speichern. Auf diese Weise ändern Sie nicht die Struktur der Datei.

dsofile.dll ist ein ActiveX-DLL, so dass es aus verschiedenen Sprachen aufgerufen werden kann, jedoch beschränkt es Sie auf Windows ausgeführt wird. Hier finden Sie weitere Informationen zu dsofile.dll: http://support.microsoft.com/kb/224351

+0

Ich glaube, dass dsofile.dll nur mit 'Structured Storage' Dateien funktioniert. –

4

Eine allgemeine Lösung besteht darin, nur verschiedene Dateien zu verwenden. Neben jeder Datei haben Sie einfach eine Datei mit demselben Dateinamen mit einer anderen Erweiterung. Zum Beispiel: foobar.txt und foobar.txt.md5 (oder .crc).

1

Ich würde die CRC nicht in der Datei selbst speichern. Ich hätte eine einzige Datei (ich würde das XML-Format verwenden), die Ihr Programm verwendet, mit einer Liste von Dateinamen und ihren zugehörigen CRC-Werten. Keine Notwendigkeit, es so kompliziert zu machen.

4

Die gängige Lösung, die häufig in Kommunikationsprotokollen verwendet wird, besteht darin, das CRC-Feld auf 0 zu setzen, den CRC zu berechnen und dann anstelle von 0 zu setzen. Der Prüfcode sollte den umgekehrten Vorgang ausführen - CRC lesen, Null setzen Feld, berechnen Sie die CRC und vergleichen.

Auch für eine Datei Prüfsumme empfehle ich dringend MD5 anstelle von CRC.