Hallo,
falls du es noch immer nicht hinbekommen haben solltest. Ich brauchte heute auch die Möglichkeit, alle Dateien eines
FTP-Verzeichnisses incl. Unterverzeichnisse aufzulisten. Hier hast du die umgeschriebene Prozedur:
Delphi-Quellcode:
procedure FindAllFilesFTP(FTPCon: TIdFTP; Directory: String; FileList,DirList: TStrings; WithSubDirs, ClearList: Boolean);
procedure ScanDir(const Directory,SubDir: String; WithDir: Boolean);
var
i: Integer;
begin
FTPCon.ChangeDir(Directory + SubDir);
FTPCon.List;
for i := 2 to FTPCon.DirectoryListing.Count-1 do
if FTPCon.DirectoryListing.Items[i].ItemType = ditFile then
begin
if WithDir then FileList.Add(SubDir + FTPCon.DirectoryListing.Items[i].FileName)
else FileList.Add(FTPCon.DirectoryListing.Items[i].FileName);
end else if FTPCon.DirectoryListing.Items[i].ItemType = ditDirectory then
DirList.Add(SubDir + FTPCon.DirectoryListing.Items[i].FileName + '/');
if WithSubDirs then
begin
for i := 2 to FTPCon.DirectoryListing.Count-1 do
if FTPCon.DirectoryListing.Items[i].ItemType = ditDirectory then
ScanDir(Directory + SubDir,FTPCon.DirectoryListing.Items[i].FileName + '/',True);
end;
end;
begin
if not FTPCon.Connected then Exit;
FileList.BeginUpdate;
DirList.BeginUpdate;
try
if ClearList then
begin
FileList.Clear;
DirList.Clear;
end;
if Directory = '' then Exit;
if Directory[Length(Directory)] <> '/' then
Directory := Directory + '/';
ScanDir(Directory,'',False);
finally
DirList.EndUpdate;
FileList.EndUpdate;
end;
end;
Das war nun wirklich nicht schwer. Du musst der Prozedur eine
FTP-Instanz übergeben. Was noch wichtig ist, vorher bitte folgendes fest einstellen: FTPCon.UseMLIS := True;
Und in die uses der
Unit "IdAllFTPListParsers" eintragen.
WICHTIG: Ist für
Indy 10 geschrieben!!!
Viel Spaß damit.
Grüße ddcool