Einzelnen Beitrag anzeigen

Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 

Re: liste alle FTP Daten. hatt noch kleine Fehler

  Alt 10. Mai 2008, 17:23
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] = 'dthen // 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] = 'dthen // 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
Klaus
  Mit Zitat antworten Zitat