Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi liste alle FTP Daten. hatt noch kleine Fehler (https://www.delphipraxis.net/113549-liste-alle-ftp-daten-hatt-noch-kleine-fehler.html)

Deltachaos 10. Mai 2008 12:07

Re: liste alle FTP Daten. hatt noch kleine Fehler
 
Zitat:

Zitat von Die Muhkuh
Doch, kann sie.

Ok.
Ich hab jetzt mal angefangen:

Delphi-Quellcode:
procedure list(inhalt: string);
var strlist: tstringlist;
    ver_merk: string;
    ex, dir_ja, dir_nein: boolean;
    sl,z,d: integer;
begin
  form1.IdFTP1.List(form1.ListBox2.Items,'',false);
  for z:=0 to form1.ListBox2.Count-1 do
  begin
    for sl:=0 to length(form1.ListBox2.Items[z]) do
      if form1.ListBox2.Items[z][sl]= '/'
        then form1.IdFTP1.ChangeDirUp;
    for d:=0 to length(form1.ListBox2.Items[z]) do
    begin
      dir_ja:= false;
      dir_nein:= true;
      if form1.ListBox2.Items[z][d]= '.'
        then
        begin
          dir_ja:= true;
          dir_nein:= false;
        end;
    end;
    if dir_nein then
    begin
      ver_merk:= ver_merk + form1.ListBox2.Items[z] + '/';
      list(form1.ListBox2.Items[z]);
    end;
    if dir_ja
    then
    begin
      form1.ListBox1.AddItem(ver_merk + form1.ListBox2.Items[z], TObject (form1));
    end;
  end;
end;
Ich komme aber irgendwie nicht weiter.
Es werden jetzt wieder alle verzeichnisse und Daten gelistet di im root liegen.

Nuclear-Ping 10. Mai 2008 12:09

Re: liste alle FTP Daten. hatt noch kleine Fehler
 
Zitat:

Zitat von Deltachaos
Achja und eine procedure kan sich doch nicht nochmal selbst aufrufen oder?

Wie Manuel schon sagte: Doch, kann sie. Sie macht dann genau das gleiche mit dem neuen übergebenen Parameter und wenn sie fertig ist, kehrt sie zurück und macht da weiter, wo sie aufgehört hat.

[edit]
Bau dir doch erstmal eine Funktion, die lokal auf der Festplatte rekursiv Verzeichnisse auflistet. Wie Manuel schon sagte: Such mal in der CodeLib von der DP, da sind Funktionen irgendwo, die das machen. Gehe sie durch (Breakpoints, F8) und verstehe sie. Dann setze das nach FTP um.
[/edit]

Deltachaos 10. Mai 2008 14:26

Re: liste alle FTP Daten. hatt noch kleine Fehler
 
ok Ich hab schon angefangen

Delphi-Quellcode:
procedure list(dir: string);
var d, all: integer;
    dirja: boolean;
begin
  form1.IdFTP1.ChangeDir(dir);
  form1.IdFTP1.List(form1.ListBox3.Items, '*', false);
  for all:=0 to form1.ListBox3.Count-1 do
  begin
    dirja:= true;
    for d:=0 to length(form1.ListBox3.Items[0]) do
      begin
        if form1.ListBox3.Items[0][d]= '.'
        then
        begin
          form1.ListBox2.AddItem(form1.ListBox3.Items[0], TObject (form1));
          form1.ListBox3.Items.Delete(0);
          dirja:= false;
        end;
      end;
    if dirja then
    begin
      list(form1.ListBox3.Items[0]);
      form1.ListBox3.Items.Delete(0);
    end;
  end;
end;
Ich binn eigenlich der meinung das das richtig ist aber irgendwie will es noch nicht so wie ich will.
auserdem brauche ich ja den kompletten pfad zur datei wie mache ich dass?

Klaus01 10. Mai 2008 17:23

Re: liste alle FTP Daten. hatt noch kleine Fehler
 
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

Deltachaos 11. Mai 2008 15:28

Re: liste alle FTP Daten. hatt noch kleine Fehler
 
also funktioniren tut es nicht. meine frage warum??

Die Muhkuh 11. Mai 2008 16:01

Re: liste alle FTP Daten. hatt noch kleine Fehler
 
Hat jemand eben ne Glaskugel für mich?

Der.Kaktus 11. Mai 2008 16:04

Re: liste alle FTP Daten. hatt noch kleine Fehler
 
Zitat:

Zitat von Die Muhkuh
Hat jemand eben ne Glaskugel für mich?

Aber klar doch..hab noch ne grosse und "alte" liegen..die kann weg *ggg*

Die Muhkuh 11. Mai 2008 16:04

Re: liste alle FTP Daten. hatt noch kleine Fehler
 
Freut mich, dass jemand noch eine hat. Ich schick Dir per PN grad meine Postadresse :zwinker:

Klaus01 11. Mai 2008 19:19

Re: liste alle FTP Daten. hatt noch kleine Fehler
 
Liste der Anhänge anzeigen (Anzahl: 1)
Guten Abend,

Glaskugel habe ich auch keine.
Was es sein könnte das die Prozedur bei dem Aufruf unbekannt ist.
In meinem simplen Beispielprojekt wurde die Prozedur
vor der ButtonClick Methode eingefügt.
Daher ist sie in der ButtonClick Methode bekannt weil
vorher definiert.

Du kannst die Prozedur auch gerne zur Methode
Deiner Klasse machen.

Dann würde der Prozedurkopf so ausschauen:
Delphi-Quellcode:
procedure TForm1.getFtpFileList(ftp:TidFtp;rootFolder:String;folderList:TStringList);
Und die Klassendefinition so:

Delphi-Quellcode:
TForm1 = class(TForm)
   ...
    procedure Button1Click(Sender: TObject);
  private
    procedure getFTPFileList(ftp:TidFtp;rootFolder:String;folderList:TStringList);
    { Private declarations }
  public
    { Public declarations }
  end;
Anbei noch das Beispielproject mit Screenshot, exe und pas.

.. gerne geschehen.

Grüße
Klaus

Deltachaos 13. Mai 2008 14:12

Re: liste alle FTP Daten. hatt noch kleine Fehler
 
Also bei mir siet dass so aus.

http://www.fos-clan.com/max/ftp.jpg


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:27 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz