Autor Beitrag
tastenkleber
Hält's aus hier
Beiträge: 13
Erhaltene Danke: 1



BeitragVerfasst: Fr 21.08.15 00:18 
Guten Abend,

ich möchte per FTP ein komplettes Verzeichnis von meinem FTP-Server auf meinen PC laden.
Zu diesem Thema gibt es bereits zahlreiche Threads und Codebeispiele, die allesamt für mich auch verständlich und nachvollziehbar sind – nur bei mir klappt es trotzdem nicht. An dem Punkt, wo idFTP1.DirectoryListing.Count = 0 ist, muß ich leider kapitulieren. Damit ihr versteht, was ich meine, hier ein Code-Ausschnitt:


ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
procedure TForm1.Button1Click(Sender: TObject);
var i:Integer;myLocalDirectory : string;
begin
  myLocalDirectory := 'D:\Test\musik\';
  with idFTP1 do begin
    Host :='xyz.de';
    Port := 21;
    Username := 'abc123';
    Password := '******';
    Passive  := True;
  end;

 try
  idFTP1.Connect;
 except
  on E:Exception do
  begin
   MessageDlg(E.Message, mtError, [mbOk], 0);
   idFTP1.Disconnect;
   exit;
  end;
 end;

 if idFTP1.Connected then
 begin
   idFTP1.ChangeDir('html/downloads/musik');
   showmessage(idFTP1.GetNamePath);// Es wird das o.a. Verzeichnis angezeigt (klappt also schonmal).
   // dort sind 7 Dateien und 3 Verzeichnisse enthalten.
   idFTP1.List;
   showmessage(IntToStr(idFTP1.ListResult.count)); // Ergebnis = 10 -> 7 Dateien und 3 Verzeichnisse (klappt auch!)
   showmessage(IntToStr(idFTP1.DirectoryListing.Count)); // Ergebnis = 0 (warum = 0 ??)
 end;
// wegen DirectoryListing.count = 0 brauch ich erst gar nicht weiter zu machen...

{ das würde dann in etwa so aussehen:}
  for i :=0 to idFTP1.DirectoryListing.Count-1 do
  begin
    if idFTP1.DirectoryListing[i].ItemType = ditFile then // die Dateien kopieren
      idFTP1.Get(idFTP1.DirectoryListing[i].FileName, myLocalDirectory + idFTP1.DirectoryListing[i].FileName);   
   // dann die Verzeichnisse rekursiv
    if idFTP1.DirectoryListing[i].ItemType = ditDirectory then;//... usw
    
  end

  idFTP1.disconnect;
end;



Wer kann mir hier weiterhelfen oder mir wenigstens erklären, warum idFTP1.DirectoryListing.count = 0 ist, obwohl
idFTP1 verbunden ist und mit GetNamePath und ListResult.Count richtige Ergebnisse zeigt?
mandras
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 429
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: Fr 21.08.15 00:30 
vielleicht hilft

www.delphipraxis.net...irectorylisting.html

Eintrag Nr. 6
tastenkleber Threadstarter
Hält's aus hier
Beiträge: 13
Erhaltene Danke: 1



BeitragVerfasst: Fr 21.08.15 01:37 
vielen Dank, Volltreffer.
Die Lösung war: Unit "IdAllFTPListParsers" musste eingebunden werden.

Hier noch ein Hinweis: bei
ausblenden Delphi-Quelltext
1:
idFTP1.Get(idFTP1.DirectoryListing[i].FileName, myFolder,True);					

musste ich den letzten Wert (True) setzen. Ohne diesen Werte erhielt ich immer den Fehler "file already exists".