Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TFileStream -> Datei bereits in Benutzung (https://www.delphipraxis.net/121832-tfilestream-datei-bereits-benutzung.html)

Serpentine 5. Okt 2008 16:55


TFileStream -> Datei bereits in Benutzung
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var FS:Tfilestream;
    URL:String;
    blockliste: Array of AnsiString;
begin
URL:= 'http://.../server_'+listbox3.items.strings[ListBox3.ItemIndex];
FS:=Tfilestream.Create('SpammerList.dat',fmOpenWrite,fmShareDenyNone);
IdHTTP1.Get(URL,FS);
FreeAndNil(FS);
IdHTTP1.Free;
end;
Wenn ich diese Prozedur 1 mal ausführe dann funktioniert sie, aber wenn ich sie dann nochmal ausführe mit einem anderen Listboxeintrag dann kommt der Fehler dass die Datei von einem anderen Prozess benutzt wird, was nicht seien kann.

DevilsCamp 5. Okt 2008 17:20

Re: TFileStream -> Datei bereits in Benutzung
 
Was erhältst Du, wenn Du statt
Delphi-Quellcode:
FreenAndNil(FS);
direkt
Delphi-Quellcode:
FS.Free;
FS := nil;
verwendest?

BTW:

Es müsste heißen:
Delphi-Quellcode:
FS:=Tfilestream.Create('SpammerList.dat',fmOpenWrite OR fmShareDenyNone);

Serpentine 5. Okt 2008 17:28

Re: TFileStream -> Datei bereits in Benutzung
 
Ich habe denselben Fehler und ich kann mir nicht vorstelen was Falsch ist...

SirThornberry 5. Okt 2008 17:48

Re: TFileStream -> Datei bereits in Benutzung
 
Auf den ersten Blick fällt mir auf das da try.. fehlt. Wenn die Http-Abfrage einmal fehl schlägt wird die Datei also nicht frei gegeben.

sx2008 5. Okt 2008 19:14

Re: TFileStream -> Datei bereits in Benutzung
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var FS:Tfilestream;
    URL:String;
    blockliste: Array of AnsiString;
    filename, s : string;
begin
  URL:= 'http://.../server_'+listbox3.items.strings[ListBox3.ItemIndex];
  filename := 'SpammerList.dat';
  if FileExists(filename) then
    FS:=Tfilestream.Create(filename,fmOpenWrite,fmShareDenyNone)
  else
    // Datei erzeugen, wenn noch nicht vorh.
    FS:=Tfilestream.Create(filename,fmCreate,fmShareDenyNone);
  try
    FS.Seek(0, soFromEnd); // ans Ende springen
    IdHTTP1.Get(URL,FS);
    s := #13#10 + StringOfCar('=', 80)+#13#10; // Trennzeile ======
    FS.WriteBuffer(s[1], Length(s)); // Trennzeile schreiben
  finally
    FS.Free; // ein normales Free ist hier vollkommen ausreichend
  end;
  IdHTTP1.Free; // bist du sicher, dass dieses Objekt freigegeben werden soll?
end;


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