2009-08-14 4 views
1

Ich suche nach einer Möglichkeit, Dateibeschädigung mit C# zu erkennen. Vielleicht ist das zu vage, aber ich suche nicht nach bestimmten Arten von Korruption, ich frage mich nur, ob es eine Möglichkeit gibt zu erkennen, dass eine Datei im Allgemeinen beschädigt wurde. Wer weiß, ob dies möglich ist und wie Sie es in C# tun würden? Vielen Dank.Generische Möglichkeit, Dateikorruption mit C# zu erkennen?

+0

Können Sie näher erläutern, welche Arten von Korruption? Es könnte eine bessere Idee sein, eine Codierung zu verwenden, die eine Fehlerkorrektur ermöglicht. –

Antwort

5

Wenn Sie wissen, wie die Datei aussehen soll, können Sie sie mit einem bekannten guten MD5-Hash vergleichen.

Abgesehen davon, wenn Sie nach bestimmten Mustern der Korruption suchen. Zum Beispiel sollte eine Sequenz von Bytes an einer Stelle sein, aber es wird durcheinander gebracht, das könnte ein Flag sein. Alles hängt davon ab, wonach Sie suchen.

4

Die übliche Methode ist, etwas wie CRC zu verwenden. Sie vergleichen die CRC in der Datei (normalerweise an die Datei angehängt) mit der aus der Payload berechneten CRC. Wenn sie nicht übereinstimmen, wissen Sie, dass die Daten beschädigt sind.

1

Es gibt keine API, mit der Sie Dateifehler erkennen können. Sie müssen es selbst tun, und wie Sie das tun, hängt ganz von Ihren Bedürfnissen ab.

0

Dateisysteme tun dies normalerweise nicht. Soweit ich weiß, gibt es drei Gründe.

Erstens, jede Art von Anti-Korruptions-Algorithmus wird Prüfsummen eines Typs beinhalten, die ein wenig teuer sind rechenintensiv.

Zweitens gibt es mindestens zwei Ursachen für Korruption. Dateien können beschädigt werden, wenn ein Laufwerksektor fehlerhaft wird, aber sie können auch von einer Anwendung beschädigt werden. Und natürlich, wenn diese Anwendung die Datei ändert und ihre neue Version speichert, wird sie immer sagen, dass die neue Version großartig ist, auch wenn sie jedes zweite Wort durch "Poop" ersetzt.

Drittens, was können Sie anders als eine Ausnahme auslösen, wenn eine Datei beschädigt ist? Wenn du die Datei checkst, dann hast du eine sauberere Methode zu wissen, dass die Datei kaputt ist, aber am Ende ist sie immer noch kaputt, und nicht viel, was du tun kannst, außer halt.