Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TFileStream schließen (https://www.delphipraxis.net/28193-tfilestream-schliessen.html)

cheatzs 20. Aug 2004 16:56


TFileStream schließen
 
Hi Leutz,
hab ein TFileStream gemacht, funzt auch alles.
Leider kann ich nicht mit try ... finally arbeiten, zumindest nicht direkt für den FileStream, weil ich den über mehrere Prozedur-Aufrufe offen halten muss.

Also brauch ich ne Möglichkeit beim Schließen vorher zu prüfen ob dem FileStream eine Datei zugeordnet ist... (es könnte ja sein, während der Prozedur ist eine Exception aufgetreten und der FileStream wird nicht ordnungsgemäß geschlossen)

Ich dächte immer das ginge mit
Delphi-Quellcode:
if FileStream <> NIL then
  FileStream.Free;
Leider bringt das immer ne Exception.
Auch das FileStream.Free allein, ohne die If-Abfrage, obwohl in der Online-Hilfe für TObject.Free steht
Zitat:

Unlike Destroy, Free is successful even if the object is nil; so if the object was never initialized, Free won’t result in an error.
, erzeugt eine Zugriffs-Fehler.

Also gibts da ne Möglichkeit??? Oder hab ich sogar die richtige Möglichkeit und der Fehler liegt womöglich wo anders?

Danke

Bye

edosoft 20. Aug 2004 16:59

Re: TFileStream schließen
 
das tfilestream muss zuerst erzeugt worden sein bevor dus wieder schließen kannst aber dann gehts normal mit "Free".

cheatzs 20. Aug 2004 17:03

Re: TFileStream schließen
 
das ist ja das Problem :wink:, ich kann vorher nicht wissen, ob das FileStream erstellt wurde und noch nicht wieder geschlossen

Niko 20. Aug 2004 17:07

Re: TFileStream schließen
 
Hi,

das Prüfen von FileStream auf nil kannst du dir vor dem Free sparen - dass macht Free selbst. Allerdings ist das auch die einzige Möglichkeit, über die Free feststellen kann, ob FileStream wirklich auf einen FileStream zeigt.

Ist deine Variable also nicht nil, versucht Free das Objekt freizugeben. Gibt es das Objekt aber gar nicht, kommt es zu einer Exception.

Du solltest also die Variable mit nil initialisieren oder auf nil setzen, wenn beim Create ein Fehler auftritt. Außerdem kann es nicht schaden, die mögliche Exception beim Aufruf von Free abzufangen.

Fossibaer58809 20. Aug 2004 17:08

Re: TFileStream schließen
 
Ich denke mal, der Fehler tritt immer auf, wenn der Filestream schon mal geöffnet und dann wieder geschlossen wurde.

Ich würde folgendes versuchen:

IF Assigned(FFileStream) then
FreeAndNil(FFileStream);

nailor 20. Aug 2004 17:08

Re: TFileStream schließen
 
beim programmstart deine variable mit nil initialisieren, und immer beim killen mit FreeAndNil() arbeiten. dann gibt es keine exc.

cheatzs 20. Aug 2004 17:19

Re: TFileStream schließen
 
THX, jetzt geht es!

Danke für schnelle Antworten!

Bye

edosoft 20. Aug 2004 17:46

Re: TFileStream schließen
 
vielleicht gehts ja auch mit
Delphi-Quellcode:
try
  filestream.Free;
  except
  end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:14 Uhr.

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