Delphi-PRAXiS

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 9. Mai 2008 20:03


liste alle FTP Daten. hatt noch kleine Fehler
 
Liste der Anhänge anzeigen (Anzahl: 1)
Da ich alle Daten eines FTP-Servers mit verzeichnissen listen muss und keine kompfortablere lösung gefunden habe, habe ich mir selbst etwas zusammengeschrieben.

Delphi-Quellcode:
function how_dirs(laenge: string): integer;
var how_dir1, how_dir2: integer;
begin
  for how_dir1:=0 to length(laenge) do
      if laenge[how_dir1]= '/' then ergebnis:= ergebnis+1;
end;

procedure bk;
var st: integer;
  procedure bk2;
  var s, z, d, dirs, dir: integer;
      ex2, ex: boolean;
  begin
    form1.IdFTP1.List(form1.ListBox2.Items,'',ex);
    dirs:= ergebnis;
    ergebnis:= 0;
    for z:=0 to form1.ListBox2.Count-1 do
    begin
      ex2:= true;
      for d:=0 to length(form1.ListBox2.Items[z]) do
        if form1.ListBox2.Items[z][d]= '.'
          then
          begin
            form1.ListBox1.AddItem(form1.dir.Text + '/' + form1.ListBox2.Items[z], TObject (form1));
            ex2:= false;
          end;
        if ex2
        then
          begin
            form1.ListBox3.AddItem(form1.dir.Text + '/' + form1.ListBox2.Items[z] + '/', TObject (form1));
            for dir:=0 to dirs do
              form1.IdFTP1.ChangeDir('../');
//              showmessage(inttostr(dir) + ' ' + inttostr(dirs));
          end;
    end;
    how_dirs(form1.ListBox3.Items[0]);
    form1.IdFTP1.ChangeDir(form1.ListBox3.Items[0]);
    form1.Listbox3.Items.Delete(0);
  end;
begin
//  for st:=form1.ListBox3.Count-1 to 0 do
  for st:=0 to 5 do
    begin
      bk2;
      showmessage('toll' + form1.ListBox3.Items[0]);
    end;
end;
Die ersten Verzeichnisse werden richtig gelistet auch die Dateien (nicht auf dem bild) aber irgendwie kommt danach nur kauderwelsch (Sihe Bild) raus.
Ich weis nicht wo der Fehler ist.

Klaus01 9. Mai 2008 20:46

Re: liste alle FTP Daten. hatt noch kleine Fehler
 
Delphi-Quellcode:
procedure bk;
var st: integer;

  procedure bk2;
  var s, z, d, dirs, dir: integer;
      ex2, ex: boolean;
  begin
    form1.IdFTP1.List(form1.ListBox2.Items,'',ex); // ex hat her keinen definierten Wert
    dirs:= ergebnis;

Wenn ex true ist, werden auch sämtliche Details eines Verzeichnisses ausgegeben.
Was Du als Kauderwelsch interpretierst, sind die Datei/Verzeichnisrechte und
wem diese gehören.
Wenn Du ex richtig setzt wirst Du dieses "Kauderwelsch" nicht mehr sehen.

Zitat:

Zitat von Hilfe zu TidFTP
ADetails is a Boolean that indicates if the list should contain details about the files and directories that match the mask in ASpecifier.

When ADetails is False, only the file or directory name is returned in the ADest string list.

When ADetails is True, List can return FTP server-dependent details including the file size, date modified, and file permissions for the Owner, Group, and User.

An application must be able to parse the detailed list format based on the FTP server type identified in SystemDesc.

Grüße
Klaus

Deltachaos 10. Mai 2008 08:36

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

Nuclear-Ping 10. Mai 2008 08:55

Re: liste alle FTP Daten. hatt noch kleine Fehler
 
Schonmal was von "Rekursion" gehört?

Code:
Prozedur VerzDurchsuchen (Pfad)
  Liste den Inhalt des Verzeichnisses Pfad auf
    - Wenn Eintrag X ein Unterverzeichnis ist
        - Rufe VerzDurchsuchen (X) auf
    - Sonst ist es eine Datei
ProzedurEnde

Deltachaos 10. Mai 2008 10:08

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

Zitat von Nuclear-Ping
Schonmal was von "Rekursion" gehört?

Code:
Prozedur VerzDurchsuchen (Pfad)
  Liste den Inhalt des Verzeichnisses Pfad auf
    - Wenn Eintrag X ein Unterverzeichnis ist
        - Rufe VerzDurchsuchen (X) auf
    - Sonst ist es eine Datei
ProzedurEnde

Nein habe ich noch nicht.
aber alles nochmal umzuschreiben wehre mir zu aufwendig.
Delphi-Quellcode:
procedure bk;
var st: integer;
    hilf: string;
  procedure bk2;
  var s, z, d, dirs, dir2: integer;
      ex2, ex: boolean;
  begin
    ex:= false;
    form1.IdFTP1.List(form1.ListBox2.Items,'',ex);
    dirs:= ergebnis;
    ergebnis:= 0;
    for z:=0 to form1.ListBox2.Count-1 do
    begin
      ex2:= true;
      for d:=0 to length(form1.ListBox2.Items[z]) do
        if form1.ListBox2.Items[z][d]= '.'
          then
          begin
            if form1.ListBox3.Items.Count= 0
            then
            begin
              ref_list;
              form1.ListBox1.AddItem(form1.dir.text + '/' + form1.ListBox2.Items[z], TObject (form1));
            end
            else
            begin
              ref_list;
              form1.ListBox1.AddItem(form1.ListBox3.Items[0] + form1.ListBox2.Items[z], TObject (form1));
            end;
            ex2:= false;
          end;
        if ex2
        then
          begin
            form1.ListBox3.AddItem(form1.dir.Text + '/' + form1.ListBox2.Items[z] + '/', TObject (form1));
            ref_list;
            for dir2:=0 to dirs do
              form1.IdFTP1.ChangeDir('../');
//              showmessage(inttostr(dir) + ' ' + inttostr(dirs));
          end;
    end;
    how_dirs(form1.ListBox3.Items[0]);
    form1.IdFTP1.ChangeDir(form1.ListBox3.Items[0]);
    form1.Listbox3.Items.Delete(0);
    ref_list;
  end;
begin
//  for st:=form1.ListBox3.Count-1 to 0 do
  for st:=0 to 20 do
    begin
//      if form1.ListBox3.Items.Count> 0
//      then
//        hilf:= form1.ListBox3.Items[0];
      bk2;
      ref_list;
    end;
  form1.ListBox2.Clear;
  form1.ListBox3.Clear;
end;
Es funktionirt ja auch alles aber ich habe jetzt volgendes Problem:

In wirklichkeit:
Code:
cms/index.php
downlords/toll.zip
dmdownlords/toll2.zip
Wird so gelistet:
Code:
downlords/index.php
dmdownlords/toll.zip
Was kann ich dagegen machen?

edit: besser gesagt es ist mir nicht zu aufwendig sondern es soll erst mal funktioniren und dann kann ich immernoch was an der geschwindigkeit machen.

Nuclear-Ping 10. Mai 2008 10:21

Re: liste alle FTP Daten. hatt noch kleine Fehler
 
Wenn du es aus Bequemlichkeit nicht nochmal (ordentlich) machen willst, mußt du wohl oder übel rausfinden, wo der Fehler in deiner Logik liegt und ihn beheben?

Deltachaos 10. Mai 2008 10:24

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

Zitat von Nuclear-Ping
Wenn du es aus Bequemlichkeit nicht nochmal (ordentlich) machen willst, mußt du wohl oder übel rausfinden, wo der Fehler in deiner Logik liegt und ihn beheben?

Ja ok ich mache es neu.
wie fange ich an?
besser gesagt kann mir jemand ein codebeispiel für diese "Rekursion" geben?

Die Muhkuh 10. Mai 2008 10:26

Re: liste alle FTP Daten. hatt noch kleine Fehler
 
Schau in der Codelib. Dort gibt es Codes, die rekursiv Ordner auf der lokalen Festplatte auflisten. Dürfte kein Problem sein, dass für FTP umzubauen.

Noch eine Bitte: Lies, vor dem Absenden, Deinen Post durch und korrigiere Deine Rechtschreibfehler...

Deltachaos 10. Mai 2008 10:28

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

Zitat von Nuclear-Ping
Schonmal was von "Rekursion" gehört?

Code:
Prozedur VerzDurchsuchen (Pfad)
  Liste den Inhalt des Verzeichnisses Pfad auf
    - Wenn Eintrag X ein Unterverzeichnis ist
        - Rufe VerzDurchsuchen (X) auf
    - Sonst ist es eine Datei
ProzedurEnde

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

Die Muhkuh 10. Mai 2008 11:49

Re: liste alle FTP Daten. hatt noch kleine Fehler
 
Doch, kann sie.

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

Klaus01 13. Mai 2008 20:47

Re: liste alle FTP Daten. hatt noch kleine Fehler
 
Hallo Maximilian,

und was willst Du uns nun damit sagen?

Stören Dich die doppelten Slashes?
Sind nicht alle Dateien gelistet worden?

Wir wissen nicht wie Dein Server ausschaut,
deshalb ist es schwierig aus Deinen Aussagen
zu lesen was Dir nicht passt.

Wie stellt sich denn Dein Server dar, wenn
Du dich mit einem FTP gestartet aus der Konsole
mit ihm verbindest und ein ls -l im root
und im www Verzeichnis durchführst?

Grüße
Klaus

Deltachaos 13. Mai 2008 20:59

Re: liste alle FTP Daten. hatt noch kleine Fehler
 
Sorry, ich wollt damit eigentlich nur fragen ob dass mitt den"//" normal ist.
auserdem gibt es das verzeichniss "www" nur einmal.
Und es sind auch nicht alle daten gelistet. z.b. die in den Unter Unterverzeichnissen nicht.

Zitat:

Zitat von Klaus01
Wie stellt sich denn Dein Server dar, wenn
Du dich mit einem FTP gestartet aus der Konsole
mit ihm verbindest
und ein ls -l im root
und im www Verzeichnis durchführst?

Das Roe verstehe ich nicht wirklich. ich wies nicht was du mir damitt sagen möchtest.

Klaus01 13. Mai 2008 21:15

Re: liste alle FTP Daten. hatt noch kleine Fehler
 
Nein, das mit den doppelten Slashes ist
meines Erachtens nicht normal.
Das ist mir noch unergründlich warum die bei Dir
auftauchen. In meiner Testumgebung treten sie nicht auf.

Wenn Sie dich sehr stören kanst
Du diese mit Pfad:=StringReplace(Pfad,'//','/');
entfernen.

Mit root meinte ich das oberste Verzeichnis auf das Du
auf dem Server zugriff hast.

Mhm, auch das nicht alle Dateien gelistet werden
kann ich so nicht bestätigen.
Ist das Memofeld in der Breite eventuell zu kurz geraten,
sodas eventuell Pfade und Name abgeschnitten werden?

[edit]
Habe gerade in Deinem ersten Screenshot gesehen, dass die
Verzeichnisse im Listing bei Dir mit einem / abschließen.
Ich füge, da das bei mir nicht der Fall ist, jeweils
hinter einem Verzeichnisname ein / ein.
Daher werden die Slashes bei Dir doppelt angezeigt.
[/edit]


Grüße
Klaus

Deltachaos 13. Mai 2008 22:28

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

Zitat von Klaus01
Mit root meinte ich das oberste Verzeichnis auf das Du
auf dem Server zugriff hast.

Was root ist weiß ich. aber was du mit einem aus der Konsole gestartetem FTP meinst weiß ich nicht

Auf dem Server liegen etwa 2000 Dateien von meinem CMS (Joomla!) die liste müsste viel Länger sein.

außerdem gibt es das Verzeichnis 'www/www' nicht nur das Verzeichnis 'www/'

Wass ich mich langsam Frage ist:
  • Warum in Indy nicht schon eine Funktion um den kompletten Inhalt eines FTP Servers zu listen vorhanden ist
  • Dass anscheinend noch niemand anderes im weiten weiten WWW dieses Problem hatte

Klaus01 14. Mai 2008 06:55

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

Zitat von Deltachaos
Zitat:

Zitat von Klaus01
Mit root meinte ich das oberste Verzeichnis auf das Du
auf dem Server zugriff hast.

Was root ist weiß ich. aber was du mit einem aus der Konsole gestartetem FTP meinst weiß ich nicht

Auf dem Server liegen etwa 2000 Dateien von meinem CMS (Joomla!) die liste müsste viel Länger sein.

außerdem gibt es das Verzeichnis 'www/www' nicht nur das Verzeichnis 'www/'

Wass ich mich langsam Frage ist:
  • Warum in Indy nicht schon eine Funktion um den kompletten Inhalt eines FTP Servers zu listen vorhanden ist
  • Dass anscheinend noch niemand anderes im weiten weiten WWW dieses Problem hatte

Mit Console meine ich:
Start->Run cmd eingeben
ein Konsolenfenster poppt auf.
Hier eingeben:
ftp <Adresse des Servers>
username: <Dein Username>
password: <Dein Passwort>

ls -l
cd www
ls -l

Der FTP Client von Indy hat das nicht, weil Indy nur die FTP Funktionalität kapselt.
Und eine "alles auflisten" gibt es bei FTP nicht.
Siehe auch die rfc 959 dazu.

.. und das noch niemand dieses Problem gehabt hat, wage ich doch sehr zu bezweifeln.
.. und wenn dem wirklich so wäre, dann muß man das Problem eben selber lösen, es wäre doch
alles recht langweilig wenn man ein Programm nur durch copy+paste zusammenstricken könnte.
Der Lerneffekt bleibt dann auch auf der Strecke.

Grüße
Klaus

Nuclear-Ping 14. Mai 2008 07:33

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

Zitat von Deltachaos
Wass ich mich langsam Frage ist:
  • Warum in Indy nicht schon eine Funktion um den kompletten Inhalt eines FTP Servers zu listen vorhanden ist
  • Dass anscheinend noch niemand anderes im weiten weiten WWW dieses Problem hatte

Ohne dir Nahe treten oder persönlich werden zu wollen, aber das ist halt das Resultat, wenn man einfach kopiert, blind drauf los macht und probiert, ohne wirklich zu verstehen, was da passiert.

Hier haben dir mind. 2-3 Leute (inkl. mir) gesagt, dass du dir doch erstmal Funktionen aus der DP CodeLib anschauen, die lokale Verzeichnisse per FindFirst / FindNext und Rekursion durchsuchen und diese verstehen sollst! Und erst dann das Ganze nach FTP umsetzen.

Aber wie die meisten inspirierten Anfänger willst du am liebsten direkt beim Ziel ankommen, ohne den Weg nehmen zu wollen. Und es passiert auch immer wieder das gleiche: Man verrennt sich in Sackgassen.
  • Warum in Indy nicht schon eine Funktion um den kompletten Inhalt eines FTP Servers zu listen vorhanden ist
Warum sollte sie das? Indy bietet alle Werkzeuge, um das zu umzusetzen.
  • Dass anscheinend noch niemand anderes im weiten weiten WWW dieses Problem hatte
Hatte wahrscheinlich schon. Aber vielleicht haben sie sich bei deren Lösung nur nicht so "angestellt"? ;)

Du kannst auch nicht erwarten, dass dir hier jemand komplette Lösungen gibt. Und warum Klaus sowas immer macht, versteh ich auch nicht, obwohl er doch immer wieder merken müsste, was für "Nacharbeiten" man mit solchen gut gemeinten Gesten hat. :P

Deltachaos 14. Mai 2008 09:25

Re: liste alle FTP Daten. hatt noch kleine Fehler
 
Ich habe ja ein bei DELPHI-Treff einen Code gefunden der alle Dateien auf der Festplatte recusiv Listet.
Aber ich verstehe ihn nicht wirklich und solange ich ihn nicht verstehe kan ich ihn nicht in FTP umsetzen.

Delphi-Quellcode:
procedure GetFilesInDirectory(Directory: String; const Mask: String;
                              List: TStrings;
                              WithSubDirs, ClearList: Boolean);

procedure ScanDir(const Directory: String);
var
  SR: TSearchRec; //was ist das vür ein Typ. Wass kann er. kann man ihn auch in FTP nutzen?
begin
  if FindFirst(Directory + Mask, faAnyFile and not faDirectory, SR) {Woher kommt das jatzt plötzlich. hir wird wohl  igentwetwas in diesen SearchRec geschriben} = 0 then try
    repeat
      List.Add(Directory + SR.Name) // Ok hier wird etwas was in der variable steh in die Liste geschrieben.
    until FindNext(SR) {Woher kommt das jetzt?} <> 0;
  finally
    FindClose(SR) {Und das? Dass sind dan wohl alles Befehle die Delphi schon bereitstellt ok.};
  end;

  if WithSubDirs then begin
    if FindFirst(Directory + '*.*', faAnyFile {???}, SR) = 0 then try
      repeat
        if ((SR.attr and faDirectory) = faDirectory) and {Noch mehr ???}
           (SR.Name <> '.') and (SR.Name <> '..') then
          ScanDir(Directory + SR.Name + '\');
      until FindNext(SR) <> 0;
    finally
      FindClose(SR);
    end;
  end;
end;

begin
  List.BeginUpdate;
  try
    if ClearList then
      List.Clear;
    if Directory = '' then Exit;
    if Directory[Length(Directory)] <> '\' then
      Directory := Directory + '\';
    ScanDir(Directory);
  finally
    List.EndUpdate;
  end;
end;

Nuclear-Ping 14. Mai 2008 09:29

Re: liste alle FTP Daten. hatt noch kleine Fehler
 
Du kannst den Cursor in TSearchRec setzen und F1 drücken, genauso bei faAnyFile, etc. Da wird dann ne Hilfe aufgehen, die dir das alles erklärt.

Weitere Links:
- http://www.delphi-treff.de/tutorials...e-algorithmen/
- http://www.delphibasics.co.uk/RTL.asp?Name=FindFirst
- http://www.festra.com/eng/snip04.htm


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:37 Uhr.

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