Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi In einen TFileStream speichern und laden (https://www.delphipraxis.net/66906-einen-tfilestream-speichern-und-laden.html)

Neutron 6. Apr 2006 10:28


In einen TFileStream speichern und laden
 
Guten Tag
Ich hab ein Programm geschrieben welches zu Anfang Daten aus einem TFileStream in eine Listbox lädt:

Delphi-Quellcode:
procedure TDatein.LoadFromStream;
var
Stream : TFileStream;
begin
Stream := TFileStream.Create(ExtractFilePath(Application.ExeName)+'Speicher\Daten\1.OKM', fmOpenRead); //Er lädt hier die Streamdaten
Form2.ListBox1.Items.LoadFromStream(Stream); //Jetzt Lädt er alle Streamdaten in die Listbox
end;
Und am ende dies Daten aus der Listbox wieder speichert:

Delphi-Quellcode:
procedure TDatein.SaveToStream;
var
Stream : TFileStream;
begin
Stream := TFileStream.Create(ExtractFilePath(Application.ExeName)+'Speicher\Daten\1.OKM', fmCreate);
Form2.ListBox1.Items.SaveToStream(Stream);
end;
Hier tritt leider immer ein Fehler auf! Allerdings nur wenn diese Datei bereits besteht.
Hatt jemand ne Idee wie man den Fehler beheben kann oder warum er überhaupt auftritt?

dataspider 6. Apr 2006 10:38

Re: In einen TFileStream speichern und laden
 
Hallo,

ich kann mir denken, dass der Stream, den du ja nicht wieder zerstörst, noch die Datein in Benutzung hat.
Du solltest den Stream nach Benutzung zerstören und am Besten in ein try finally einbetten.

Cu, Frank

dataspider 6. Apr 2006 10:40

Re: In einen TFileStream speichern und laden
 
Also:

Delphi-Quellcode:
procedure TDatein.LoadFromStream;
var
  Stream : TFileStream;
begin
  Stream := TFileStream.Create(ExtractFilePath(Application.ExeName) + 
           'Speicher\Daten\1.OKM', fmOpenRead);
  try
    Form2.ListBox1.Items.LoadFromStream(Stream);
  finally
    Stream.Free;
  end;
end;
Frank

Neutron 6. Apr 2006 10:49

Re: In einen TFileStream speichern und laden
 
:-D Danke ich werd es mal probieren!

Phistev 6. Apr 2006 10:53

Re: In einen TFileStream speichern und laden
 
Und mit LoadFromFile statt LoadFromStream übernimmt die Liste auch das Erstellen und Freigeben der Streams für dich.

DevilsCamp 6. Apr 2006 10:54

Re: In einen TFileStream speichern und laden
 
Zitat:

Zitat von Neutron
Guten Tag
Ich hab ein Programm geschrieben welches zu Anfang Daten aus einem TFileStream in eine Listbox lädt:

Delphi-Quellcode:
procedure TDatein.LoadFromStream;
var
Stream : TFileStream;
begin
Stream := TFileStream.Create(ExtractFilePath(Application.ExeName)+'Speicher\Daten\1.OKM', fmOpenRead); //Er lädt hier die Streamdaten
Form2.ListBox1.Items.LoadFromStream(Stream); //Jetzt Lädt er alle Streamdaten in die Listbox
end;
Und am ende dies Daten aus der Listbox wieder speichert:

Delphi-Quellcode:
procedure TDatein.SaveToStream;
var
Stream : TFileStream;
begin
Stream := TFileStream.Create(ExtractFilePath(Application.ExeName)+'Speicher\Daten\1.OKM', fmCreate);
Form2.ListBox1.Items.SaveToStream(Stream);
end;
Hier tritt leider immer ein Fehler auf! Allerdings nur wenn diese Datei bereits besteht.
Hatt jemand ne Idee wie man den Fehler beheben kann oder warum er überhaupt auftritt?

Du öffnest die Datei und läßt sie offen, da du den Stream nicht frei gibst. Dadurch wird die Datei gesperrt und dein Schreibversuch schlägt fehl. Mit dataspider's Änderung sollte das nicht mehr passieren.

Du solltest den Stream aber auch in der Methode "SaveToStream" deines Fensters wieder mit
Delphi-Quellcode:
Stream.Free
freigeben...


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:41 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