Einzelnen Beitrag anzeigen

Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#11

Re: In Binärdatei suchen

  Alt 13. Jan 2007, 14:14
Hallo!

Vielen Dank für das Beispiel! Ich habe es so abgeändert:

Zitat:
procedure TForm1.Button1Click(Sender: TObject);
const
BUFSIZE = 64 shl 10;
var stream: TStream;
test: string;
i: integer;

buffer: String;
chunk: Integer;
begin
stream := TFileStream.Create('D:\Datei.bin', fmOpenRead);
chunk := Max(BUFSIZE, stream.Size - stream.Position);
if chunk < Length(buffer)
then SetLength(buffer, chunk)
else SetLength(buffer, BUFSIZE);
stream.Read(buffer[1], chunk); //84068

for i := 1 to 10 do begin
test1 := test1 + IntToHex(ord(buffer[i]),2) + ' ';
end;

showMessage(test);

stream.Free;
end;
Was genau hat es mit der Zuteilung von chunk auf sich? Ich durchschaue leider nicht ganz, wofür das gut ist.

Ich habe folgende beobachtung gemacht:
Wenn ich das Programm so laufen lasse, werde mir mit showMessage wunderbar die ersten 10 Byte angezeigt (E0 32 98 00 00 00 00 00 00 00). Aber: Es sind die falschen! Wenn ich mir die Datei mit einem Hex-Editor anschaue kommt diese Bytefolge nirgendwo vor, besonders nicht am Dateianfang.

Wenn "stream.Read(buffer[1], chunk);" durch "stream.Read(buffer[1], ZAHL);" ersetze und mit verschiedenen Werten für ZAHL rumprobiere bekomme ich das Ergebnis:
ZAHL = 1 bis 84068 --> Es werden die korrekten Bytes angezeigt (D2 18 B4...)
ZAHL = 84068 bis 84072 --> Es kommt zu einer Exception
ZAHL = 84073 oder größer --> Das falsche Ergebnis wird angezeigt.

Das Ergebnis kann ich nicht wirklich deuten? Wie kommen die Zahlen zustande? Wo könnte der Fehler liegen?

Besten Dank!
Ares
  Mit Zitat antworten Zitat