Einzelnen Beitrag anzeigen

XoRiC

Registriert seit: 20. Sep 2005
43 Beiträge
 
RAD-Studio 2009 Arc
 
#1

Fehler bei TFileStream.ReadBuffer mit Buffer size

  Alt 2. Jul 2010, 09:20
Hallo Forum,

ich habe ein Problem mit meinem FileStream, das ich mir nicht erklären kann.
Ich möchte aus einer 40 byte großen Datei die ersten 9 byte in einen Buffer einlesen.

Hier ist mein Code:
Delphi-Quellcode:
procedure Test;

  var buf: array of byte;
      buf_headsize: integer;
      FS: TFileStream;

  const FN: String = '.\Test.dat';

begin
  FS := TFileStream.Create(FN, fmOpenReadWrite);
  buf_headsize := 9;

  if (FS.Size >= buf_headsize) then begin
    // FS.Size = 40
    SetLength(buf, buf_headsize);
    showmessage(inttostr(High(buf))); // liefert 8

    try
      FS.Seek(0, soFromBeginning);
      FS.ReadBuffer(buf, buf_headsize); // manchmal gibt es hier schon eine Exception
    finally
      showmessage(inttostr(High(buf)));
      // lieferte schonmal -1, auch Werte wie 12 oder 9095 wurden hier angezeigt - brachte auch schon Exceptions
    end;

  end;
end;
Auf die Datei wird sonst nirgendwo im Code zugegriffen, sie liegt fest im Projektverzeichnis und wird nicht verändert.
Der FileStream wird auch korrekt initialisiert, immerhin ist ja der Wert FS.Size = 40 abrufbar.

Durch FS.ReadBuffer dürfte sich doch außer dem Inhalt des Arrays nicht ändern, die Größe sollte doch gleich bleiben?
Kann sich diesen Fehler (Kommentare im Code) jemand erklären?

NACHTRAG:
ich habe jetzt versucht, das Array buf mit fester Länge zu erzeugen:
var buf: array [0..8] of byte; So tritt kein Fehler auf. Allerdings wäre mir ein dynamisches Array sehr viel lieber, da ich es danach noch weiterverwenden möchte.

Vielen Dank wie immer für eure Hilfe,
Gruß Xoric
"Gods are fragile things; they may be killed by a whiff of science or a dose of common sense."
- Chapman Cohen

Geändert von XoRiC ( 2. Jul 2010 um 09:34 Uhr)
  Mit Zitat antworten Zitat