Guten Abend,
mein Vorschlag zum Auflisten der Verzeichnisse eines
FTP Servers.
Getestet habe ich mit einem linux
FTP-Server und es bestehen
gute Chancen das der Code mit einem Windows
FTP-Server nicht funktionieren wird.
Delphi-Quellcode:
procedure getFtpSubFolder(
ftp:TidFtp;rootFolder:
String;folderList:TStringList);
var
sl: TStringList;
i: Byte;
begin
sl := TStringList.create;
// mask blanks
rootFolder:=StringReplace(rootFolder,'
','
\ ',[rfReplaceAll]);
// get directorylist with details
ftp.List(sl,rootFolder+'
*',true);
if sl.count > 0
then
begin
for i:=0
to sl.count -1
do
begin
if sl[i][1] = '
d'
then // is it a folder
begin
// cut directory name
sl[i]:=copy(sl[i],57,length(sl[i]));
// add to folder list
folderList.Add(rootFolder+sl[i]);
// get subfolders from directory
getFtpSubFolder(
ftp,rootFolder+sl[i]+'
/',folderList);
end;
end;
end;
sl.free;
end;
Angewendet wird es so:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
sl :TStringList;
begin
sl := TStringList.Create;
idftp1.Host:='****';
idftp1.Username:='****';
idftp1.Password:='****';
idftp1.Connect();
getFtpSubFolder(idftp1,'/',sl);
idftp1.Disconnect;
memo1.Lines.Assign(sl);
sl.free;
end;
[edit]
.. und noch eine Variante die alle Dateien und Verzeichnisse auflistet.
Delphi-Quellcode:
procedure getFtpFileList(
ftp:TidFtp;rootFolder:
String;folderList:TStringList);
var
sl: TStringList;
i: Byte;
FName:
String;
begin
sl := TStringList.create;
// mask blanks
rootFolder:=StringReplace(rootFolder,'
','
\ ',[rfReplaceAll]);
// get directorylist with details
ftp.List(sl,rootFolder+'
*',true);
if sl.count > 0
then
begin
for i:=0
to sl.count -1
do
begin
// cut directory name
FName:=copy(sl[i],57,length(sl[i]));
if sl[i][1] = '
d'
then // is it a folder
begin
// add to folder list
folderList.Add(rootFolder+FName+'
/');
// get subfolders from directory
getFtpFileList(
ftp,rootFolder+FName+'
/',folderList);
end
else
begin
// add Filename to list
folderList.Add(rootFolder+FName);
end;
end;
end;
sl.free;
end;
Grüße
Klaus