Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Mit TFileStream aus einer Datei lesen (https://www.delphipraxis.net/127563-mit-tfilestream-aus-einer-datei-lesen.html)

Viktorii 15. Jan 2009 13:49


Mit TFileStream aus einer Datei lesen
 
Hallo zusammen.

Ich arbeite zum ersten Mal mit Streams und das Schreiben in eine Datei klappt auch schon ganz gut.

Allerdings kommt bei meine Ausleseroutine nicht raus - soll heißen in dem Array stehen nur Nullen

So habe ich es gemacht:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  FileStream     : TFileStream;
  SearchRec      : TSearchRec;
  NumberOfBytes  : Int64;
  DataToParse    : array of byte;
begin
  FileStream := TFileStream.Create('StreamTest.txt', fmOpenRead);
  try
    FindFirst('StreamTest.txt', faAnyFile, SearchRec);
    NumberOfBytes := SearchRec.Size;
    SysUtils.FindClose(SearchRec);
    SetLength(DataToParse, NumberOfBytes);

    FileStream.Read(DataToParse, NumberOfBytes);
  finally
    FreeAndNil(FileStream);
  end;
end;
Wo liegt der Fehler?
Vielen Dank.

himitsu 15. Jan 2009 13:56

Re: Mit TFileStream aus einer Datei lesen
 
nimm mal statt DataToParse ein DataToParse[0]

DataToParse zeigt auf den Array-Zeiger und DataToParse[0] auf das erste Element (die nächten elemente stehen dann diekt dahinter).

Es wird bei dir praktisch nur der Zeiger gespeichert/geladen, aber nicht der Arrayinhalt.

taaktaak 15. Jan 2009 13:57

Re: Mit TFileStream aus einer Datei lesen
 
und ausserdem ist das
Delphi-Quellcode:
FindFirst('StreamTest.txt', faAnyFile, SearchRec);
NumberOfBytes := SearchRec.Size;
SysUtils.FindClose(SearchRec);
wohl überflüssig, die Filegröße ist nach Create() doch mit FileStream.Size bekannt?!

Viktorii 15. Jan 2009 14:48

Re: Mit TFileStream aus einer Datei lesen
 
Zitat:

Zitat von himitsu
nimm mal statt DataToParse ein DataToParse[0]

DataToParse zeigt auf den Array-Zeiger und DataToParse[0] auf das erste Element (die nächten elemente stehen dann diekt dahinter).

Es wird bei dir praktisch nur der Zeiger gespeichert/geladen, aber nicht der Arrayinhalt.

Funktioniert perfekt. Vielen Dank!




Zitat:

Zitat von taaktaak
und ausserdem ist das
Delphi-Quellcode:
FindFirst('StreamTest.txt', faAnyFile, SearchRec);
NumberOfBytes := SearchRec.Size;
SysUtils.FindClose(SearchRec);
wohl überflüssig, die Filegröße ist nach Create() doch mit FileStream.Size bekannt?!

Seltsamerweise stand vorhin immer der Wert 0 in FileStream.Size. Jetzt steht die richtige Größe drin, obwohl ich eigentlich nichts geändert habe :gruebel:
Naja, jetzt klappt es :-)

taaktaak 15. Jan 2009 14:53

Re: Mit TFileStream aus einer Datei lesen
 
Na, dann wird die Datei wohl noch nicht existiert haben - oder?


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz