AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Frage zu TFileStream

Ein Thema von franky.f · begonnen am 29. Jul 2008 · letzter Beitrag vom 30. Jul 2008
Antwort Antwort
franky.f

Registriert seit: 29. Jul 2008
8 Beiträge
 
#1

Frage zu TFileStream

  Alt 29. Jul 2008, 14:23
Hallo,

mich beschäftigt gerade folgende Frage:

Warum klappt folgendes nicht?
(Der Sinn sei einmal dahingestellt, es geht nur ums Prinzip ...)

Delphi-Quellcode:
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;
Das ganze passiert in Delphi 7.

Danke und Gruß
Frank
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Frage zu TFileStream

  Alt 29. Jul 2008, 14:31
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
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Frage zu TFileStream

  Alt 29. Jul 2008, 14:33
Hi Frank! Herzlich Willkommen in der DP!

Du hast dir die Antwort schon fast selbst gegeben:
Delphi-Quellcode:
// hier wird der eine Stream dem anderen zugewiesen,
// also FFileStream1 und FFileStream2 müssten auf die selbe Speicheradresse zeigen
FFileStream2 := FFileStream1;
Durch FreeAndNil wird dann nur FileStream2 auf nil gesetzt während FileStream1 weiterhin auf einen Speicher zeigt. Daher ergibt die Abfrage FileStream1 = nil false.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#4

Re: Frage zu TFileStream

  Alt 29. Jul 2008, 14:36
Du meinst false
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Frage zu TFileStream

  Alt 29. Jul 2008, 14:40
Zitat von DeddyH:
Du meinst false
Na klar ... danke fürs Aufpassen.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
franky.f

Registriert seit: 29. Jul 2008
8 Beiträge
 
#6

Re: Frage zu TFileStream

  Alt 29. Jul 2008, 17:45
Hallo und DANKE,

jetzt blick ich, glaube ich, durch.

Gruß
Frank
  Mit Zitat antworten Zitat
DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#7

Re: Frage zu TFileStream

  Alt 30. Jul 2008, 12:20
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:
...
  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;
Viele Grüße
DelphiManiac
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:54 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