![]() |
IDFtp + Download +Dir
habe versucht mit:
Code:
ein komplettes ftp-verzeichnis downzuloaden...was nicht funktioniert.
procedure TForm1.Button1Click(Sender: TObject);
var i:integer; stl : tstringlist; begin idftp1.Connect; if idftp1.connected then begin stl:=tstringlist.Create; IdFTP1.List(DirectoryListBox.Items,'*.*', False); try for i := 0 to DirectoryListBox.items.count - 1 do begin stl.Add(DirectoryListBox.items.strings[DirectoryListBox.itemindex]); DirectoryListBox.ItemIndex:=DirectoryListBox.ItemIndex+1; end; idftp1.Get( stl,'c:\Test\'+ stl); finally stl.Free; end; idftp1.Disconnect end; end; mag mir jemand zeigen was ich falsch mache? |
Re: IDFtp + Download +Dir
idftp1.Get( stl,'c:\Test\'+ stl); <= Nimmt .Get() denn ne StringList an ?
|
Re: IDFtp + Download +Dir
sorry hätte auch die fehlermeldung mitschicken sollen.
Zitat:
grüsse ;) |
Re: IDFtp + Download +Dir
Eine StringList kann bei get nicht verwendet werden. Probiers mal so z.B.:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i:integer; stl : tstringlist; begin idftp1.Connect; if idftp1.connected then begin stl := tstringlist.Create; try IdFTP1.List(stl, '*.*', False); DirectoryListBox.Items.AddStrings(stl); for i := 0 to stl.count - 1 do begin try idftp1.Get(stl[i], 'c:\Test\' + stl[i]); except on E: EIdException do // Hierfür musst du die unit IdException in uses eintragen. ShowMessage('FTP-Fehler' + #10 + E.Message); // Nur ein Beispiel, kannst die Fehler auch in ne Listbox oder in ein Label oder so übergeben. else raise; end; end; finally stl.Free; end; idftp1.Disconnect; end; end; |
Re: IDFtp + Download +Dir
perfekt...
nun sehe ich meine fehler...danke :balloon: |
Re: IDFtp + Download +Dir
wenn diese dateien schon auf der platte sind gibts ne execption "dateien schon vorhanden"
wie kann ich das lösen? |
Re: IDFtp + Download +Dir
If FileExists() -> skip ;P
|
Re: IDFtp + Download +Dir
ich bin nicht sicher wie ich das machen soll...
Delphi-Quellcode:
funktioniert nicht...
try
idftp1.Get(stl[i], 'c:\Test\' + stl[i]); If FileExists(stl[i]) Then exit; except on E: EIdException do // Hierfür musst du die unit IdException in uses eintragen. ShowMessage('FTP-Fehler'); else |
Re: IDFtp + Download +Dir
FileExists musst du über das Get setzen und statt Exit; musst du Continue; verwenden, damit die Dateien, die danach kommen, noch geladen werden.
Exit --> verlässt die prozedur (in dem Fall Button1Click) Continue --> geht zur nächsten Zahl in der for-Schleife |
Re: IDFtp + Download +Dir
ich krieg das nicht eingefügt...finde auch nirgends ein passendes beispiel..
hilfe ;) |
Re: IDFtp + Download +Dir
öhm... wo ist denn da das Problem? du musst doch nur zwei Zeilen von deinem Code vertauschen und da woe bei dir Exit; steht stattdessen Continue; hinschreiben?
Delphi-Quellcode:
If FileExists(stl[i]) Then
Continue; idftp1.Get(stl[i], 'c:\Test\' + stl[i]); |
Re: IDFtp + Download +Dir
das funktioniert nicht ... deshalb
|
Re: IDFtp + Download +Dir
mittlerweile mache ich es so,
das mit dem fileexists funktioniert aber auch hier nicht..
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var i: Integer; MyListing: TStringList; begin if TransferringData then Form1.idFTP1.Abort; if Form1.IdFTP1.Connected then Form1.IdFTP1.Disconnect; try with IdFTP1 do begin Connect; if Connected then begin ChangeDir('/test/leer/'); MyListing := TStringList.Create; List(MyListing, '*.txt', True); for i := 0 to DirectoryListing.Count - 1 do with DirectoryListing[i] do begin Application.ProcessMessages; ProgressBar1.Max := Size; Label1.Caption := 'Downloading ' + FileName + ' (' + IntToStr(Size) + ' bytes)'; if FileExists(Filename) then Continue; Get(FileName, DestinationFolder + '\' + FileName, True, True); end; Disconnect; ProgressBar1.Max := 0; Label1.Caption := ''; end; end; except; end; end; |
Re: IDFtp + Download +Dir
Hallo Horst,
ich kenne Get nicht auswendig, aber falls FileExists nicht funktioniert, dann daher, weil Du mit dieser Funktion das File das Du mit Get in ein Verzeichnis speicherst prüfen solltest.
Delphi-Quellcode:
Probiere mal, sonst schreibe was nicht geht...
...
if FileExists(DestinationFolder + '\' + FileName) then Continue; Get(FileName, DestinationFolder + '\' + FileName, True, True); ... |
Re: IDFtp + Download +Dir
jajajajaja......
es klappt ;) ;) doch nicht s. nächste seite... |
Re: IDFtp + Download +Dir
ich war zu voreilig...nun läd der nix mehr runter, weil die dateien ja schon im ordner sind
|
Re: IDFtp + Download +Dir
Zum einen erst mal zu deinem neuen Code: Du hast
Delphi-Quellcode:
vergessen.
MyListing := TStringlist.Create;
try finally MyListing.Free; // Das hier ist wichtig end; Zum anderen: Das bleibt natürlich dir überlassen. Entweder kannst du bei If FileExists() ja dann ein DeleteFile() einbauen oder du gibts der Datei einen neuen Namen mit RenameFile() |
Re: IDFtp + Download +Dir
bigthx für deinen hinweis, wie überschreiben geht nicht?
ich lösche sie nun vorher ;) |
Re: IDFtp + Download +Dir
Mit deinem neuen Code würde auch das gehen, dafür sorgt das erste true bei Get(). Wenn du die Dateien also immer nur überschreiben willst, kannst du das FileExists() wieder wegmachen, musste halt nur das erste true bei Get() dalasssen.
PS: Das zweite true bei Get() sorgt übrigens dafür, das eine existierende Datei, die noch nicht vollständig geladen wurde, an der Stelle weitergeladen wird, wo sie zuletzt aufgehört hat (Resume halt). |
Re: IDFtp + Download +Dir
deine erklärungen kamen genau richtig... bigthx
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:05 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