Danke für Eure Antworten!
Ich bekomme eine EAccessViolation in der Zeile mit
If (Buffer[I] <> 0) Then
. Nicht mehr und nicht weniger. Warum ist mir völlig unklar. Dabei sieht die Deklaration wie folgt aus:
Delphi-Quellcode:
Const
BuffSize = 1024;
Var
SR : TSearchRec;
F : File;
Buffer : Array [1..BuffSize] Of Byte;
Res : Integer;
IsEmpty : Boolean;
I : Integer;
Aber das wollte ich nicht alles hier schreiben. Deshalb hatte ich ja den Quellcode gepackt angefügt. Was genau - zusätzlich zur Fehlermeldung - braucht Ihr noch für eine schnelle Antwort. Ich bin ja durchaus willig...
Die größte Datei ist
bislang ca. 1,5 MB. Üblicher Weise beginnen Dateien nicht eben mal mit Nullen. I.d.R. steht am Anfang ein TAG, der die Datei einem bestimmten Typ zuordnet, bei exe-Dateien steht am Anfang 'MZ' etc.
Mir reicht es bei meiner Suche, wenn ich feststelle, dass die ersten 1024 Bytes (oder weniger) ausschließlich Nullen sind. Dann kann ich per Hand nachsehen. Denn nachsehen und die Dateien mit sinvollen Daten aus dem Backup ersetzen muss ich sowieso. Und weil es um ca. 200 GB an Daten geht, kann/will ich die Dateien nicht komplett auslesen.
Die Schleife werde ich später vorzeitig beenden. Das
break
steht ja schon auskommentiert da
Warum ich bei 1 und nicht bei 0 mit dem Index angefangen habe, weiß ich auch nicht.
Ich habe jetzt
- das Array von 0 bis 1023 definiert,
- habe bei BlockRead Buffer[0] angegeben und
- lasse die Schleife von 0 bis Pred(Res)
laufen
und bekomme trotzdem noch die EAccessViolation.
[edit]
Falls jemand eine leere Datei zum Testen braucht, kann ich die liefern. Gepackt dürfte die ja nicht sehr groß sein
[/edit]