![]() |
Frage zu TFileStream
Hallo,
mich beschäftigt gerade folgende Frage: Warum klappt folgendes nicht? (Der Sinn sei einmal dahingestellt, es geht nur ums Prinzip ...)
Delphi-Quellcode:
Das ganze passiert in Delphi 7.
procedure TForm1.TestFileStream;
var FFileStream1: TFileStream; FFileStream2: TFileStream; begin // Die Datei ist vorhanden und weder schreib- noch sonst irgendwie geschützt, ganz normal eben FFileStream1 := TFileStream.Create('C:\TestDatei.txt', fmOpenRead, fmShareExclusive); // hier wird der eine Stream dem anderen zugewiesen, // also FFileStream1 und FFileStream2 müssten auf die selbe Speicheradresse zeigen FFileStream2 := FFileStream1; // hier wird FFileStream2 freigegeben, dann müsste doch eigentlich auch FFileStream1 NIL sein oder ? FreeAndNil(FFileStream2); if FFileStream1 <> nil then begin // und das hier dürfte niemals erreicht werden. FreeAndNil(FFileStream1); // tut es aber :-( end; end; Danke und Gruß Frank |
Re: Frage zu TFileStream
So jetzt aber:
Deine Variable FFilestream2 wird auf Nil gesetzt und der Speicher der hinter dem Pointer steckt, freigegeben. Allerdings enthält FFilesStream1 immer noch den Pointer, also die Adresse auf den freigegebenen Speicherbereich. Wenn du jetzt mit FFilestream1 auf den Bereich zugreifen willst, gibts sicher ne Exception oder so... Grüße //edit: sorry, wegen den ganzes edit's ;) |
Re: Frage zu TFileStream
Hi Frank! Herzlich Willkommen in der DP! :hi:
Du hast dir die Antwort schon fast selbst gegeben:
Delphi-Quellcode:
Durch FreeAndNil wird dann nur FileStream2 auf nil gesetzt während FileStream1 weiterhin auf einen Speicher zeigt. Daher ergibt die Abfrage FileStream1 = nil false.
// hier wird der eine Stream dem anderen zugewiesen,
// also FFileStream1 und FFileStream2 müssten auf die selbe Speicheradresse zeigen FFileStream2 := FFileStream1; |
Re: Frage zu TFileStream
Du meinst false ;)
|
Re: Frage zu TFileStream
Zitat:
|
Re: Frage zu TFileStream
Hallo und DANKE,
jetzt blick ich, glaube ich, durch. :hello: Gruß Frank |
Re: Frage zu TFileStream
Hi franky, von mir auch nochmals ein Herzliches Willkommen!
Dein Problem wurde ja schon gelöst, habe nur noch einen kleinen Tipp für dich:
Delphi-Quellcode:
Viele Grüße
...
if FFileStream1 <> nil then // kannst du auch mit "if Assigned(FFileStream1) then" prüfen, das macht intern auch den <> nil Vegleich, ist nur eine Schönheitssache... begin // und das hier dürfte niemals erreicht werden. FreeAndNil(FFileStream1); // tut es aber :-( end; end; DelphiManiac |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:35 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