Autor Beitrag
Serpentine
Hält's aus hier
Beiträge: 5



BeitragVerfasst: So 05.10.08 18:15 
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 170
Erhaltene Danke: 3



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 682

Mac OS X Snow Leopard
Xcode 3.1
BeitragVerfasst: So 05.10.08 18:38 
user profile iconSerpentine hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: So 05.10.08 18:38 
user profile iconSerpentine hat folgendes geschrieben Zum zitierten Posting springen:
Ach und wenn man kein Verzeichnis angibt wird die Datei üblicherweise ja im "Scriptverzeichnis" abgespeichert

Was ist denn das "Scriptverzeichnis"? Wenn kein Pfad angegeben wurde, wird der aktuelle Ordner verwendet, der vielleicht der Ordner ist, in der die Anwendung liegt. Das ist aber nicht immer so, und kann in den Eigenschaften unter "Ausführen in" geändert werden.

user profile iconLexXis hat folgendes geschrieben Zum zitierten Posting springen:
Du gibst IdHTTP1 am Ende frei, erstellst es beim 2. Durchlauf aber nichtmehr neu!

Nicht schon verraten, das wird der nächste Fehler sein, wenn der erste gefixt ist. :mrgreen:
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 05.10.08 18:39 
user profile iconSerpentine hat folgendes geschrieben Zum zitierten Posting springen:
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.

user profile iconLexXis hat folgendes geschrieben Zum zitierten Posting springen:
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 :oops:
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 07.10.08 21:36 
user profile iconSerpentine hat folgendes geschrieben Zum zitierten Posting springen:
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