| Autor |
Beitrag |
Serpentine
Hält's aus hier
Beiträge: 5
|
Verfasst: So 05.10.08 18:15
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.Button1Click(Sender: TObject); var FS:Tfilestream; URL:String; 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 einmal auf den Button klicke funktioniert die Prozedur noch, führe ich die Prozedur nochmal durch, dann kann die Datei nicht benutzt werden, weil sie von einem anderen Prozess benutzt würde, obwohl ich sie eig wieder frei gegeben haben müsste.
Kann mir jemand helfen?
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 05.10.08 18:26
Das kann ich nicht reproduzieren, das einzige, was mir bei deinem Quelltext auffällt, ist, dass du einen schwerwiegenden Fehler gemacht hast. Du hast kein Verzeichnis angegeben, also typischerweise das Anwendungsdatenverzeichnis, wenn du Daten speichern willst, oder das Temp-Verzeichnis für temporäre Dateien, oder zum Testen das deiner Anwendung ( ExtractFilePath(ParamStr(0)) ).
So ist es einfach nur Glück, dass es überhaupt funktioniert.
Was die Sperrung der Datei angeht, so kann ich das nicht reproduzieren. Kann es sein, dass beim Download in Get ein Fehler auftritt und deshalb das FreeAndNil nicht abgearbeitet wird?
|
|
Serpentine 
Hält's aus hier
Beiträge: 5
|
Verfasst: So 05.10.08 18:34
Nope, die Prozedur läuft einmal komplett durch, und dann nie wieder.
Ach und wenn man kein Verzeichnis angibt wird die Datei üblicherweise ja im "Scriptverzeichnis" abgespeichert, daher würde ich es nicht als besonders schweren Fehler bezeichnen.
Trotzdem danke für deine Bemühung
|
|
LexXis
      
Beiträge: 170
Erhaltene Danke: 3
|
Verfasst: So 05.10.08 18:37
Du gibst IdHTTP1 am Ende frei, erstellst es beim 2. Durchlauf aber nichtmehr neu!
Hat IMHO mit dem FileStream nix zu tun
mfg
|
|
Dunkel
      
Beiträge: 682
Mac OS X Snow Leopard
Xcode 3.1
|
Verfasst: So 05.10.08 18:38
Serpentine hat folgendes geschrieben : | | Ach und wenn man kein Verzeichnis angibt wird die Datei üblicherweise ja im "Scriptverzeichnis" abgespeichert, daher würde ich es nicht als besonders schweren Fehler bezeichnen. |
False! (was Du auch immer als "Skriptverzeichnis" bezeichnest)
Ohne Angabe eines Pfads wird das aktuelle Arbeitsverzeichnis benutzt; üblicher Weise ist es das, wo sich auch die Echse befindet. Das kann sich aber im Programmverlauf beliebig ändern! Du weißt dann nie, wo solche Dateizugriffe landen!
_________________ Ich streite einsam mich mit dieser Oberflächenwelt
Gutes sei ein löblich Brot von dem ich zehre - bis zum Tod [Das Ich - Im Ich]
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: So 05.10.08 18:38
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 05.10.08 18:39
Serpentine hat folgendes geschrieben : | | Ach und wenn man kein Verzeichnis angibt wird die Datei üblicherweise ja im "Scriptverzeichnis" abgespeichert | Nein
Die Datei wird im aktuellen Arbeitsverzeichnis gespeichert! Dieses wird zum Beispiel durch Dateidialoge geändert, auch kann man es in einer Verknüpfung angeben, etc.
Ohne Verzeichnisangabe kannst du nicht sicher sein wo die Datei gespeichert wird.
LexXis hat folgendes geschrieben : | Du gibst IdHTTP1 am Ende frei, erstellst es beim 2. Durchlauf aber nichtmehr neu!
Hat IMHO mit dem FileStream nix zu tun |
Das habe ich ganz übersehen, weil ich es routineweise manuell erstellt habe 
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 06.10.08 09:57
Falls es interessiert, ihr könnt aufhören rum zu raten. Das ist ein Crossposting. Eine Lösung wurde wahrscheinlich hier gefunden: www.delphipraxis.net...ts+in+benutzung.html
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 07.10.08 21:36
Serpentine hat folgendes geschrieben : | | Ach und wenn man kein Verzeichnis angibt wird die Datei üblicherweise ja im "Scriptverzeichnis" abgespeichert |
Dazu auch noch die ausführliche Erklärung mit Gegenbeispiel, das hatte ich ganz vergessen dazuzuschreiben  .
www.delphi-library.d...ewtopic.php?p=499701
|
|