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