none
FTP Verzeichnis rekursiv auslesen und Treeview füllen

    Frage

  • Guten Abend,

    nachdem ich nun mehrere Stunden damit verbracht habe eine Lösung zu finden, gebe ich nun auf und Frage mal hier nach.

    Also ich möchte ein FTP-Verzeichnis rekursiv (Ordner, Unterordner, Dateien) auslesen und diese Daten in einem Treeview anzeigen. Beim klick auf das Treeview Element soll mir der Pfad zur Datei ausgegeben werden.

    Hat dazu Irgendwer eine Lösung? Ich habe es mit einzelnen Beispielen versucht in denen Mal nur der FTP-Pfad ausgelesen wurde und welchen in denen der Treeview gefüllt wurde, nur die beiden Sachen miteinander zu kombinieren habe ich nicht gefunden und alles was ich versucht habe, hat nicht funktioniert.

    Vielen Dank im vorraus.

    Gruß Markus

    Montag, 19. November 2012 18:15

Antworten

  • Hallo Markus,

    bei FTP gibt es leider kein einheitliches Format für die Dateiauflistungen.

    Man muss die Daten zerlegen um an die notwendigen Informationen zu kommen.

    Die häufigsten beiden Varianten stellen entweder eine MS-DOS Auflistung bereit, wie man sie mit DIR erhält, oder aber dem äquivalenten UNIX Kommando "ls -l", daneben gibt es diverse Abwandlungen.

    In den Beispielen oben findest Du einige Varianten wie z. B:

      If line.Trim().ToLower().StartsWith("d") OrElse line.Contains(" <DIR> ") Then
    

    (die erste bezieht sich auf UNIX, die zweite auf die DOS Auflistung)

    In einem  Beitrag hatte ich auf einen Artikel hingewiesen, in dem eine umfassendere Lösung vorgestellt wird:
    http://www.blackbeltcoder.com/Articles/client/an-ftpclient-class-and-winform-control

    Gruß Elmar

    • Als Antwort markiert Numax09 Sonntag, 25. November 2012 18:02
    Mittwoch, 21. November 2012 19:38

Alle Antworten

  • Hallo Numax09,

    Hier ist ein kleines Beispiel die den root Ordner in einer Treeview anzeiget.

    Du kannst es rekursiv machen für alle Ordner.

              FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://ftp..../");
                request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
            
                request.Credentials = new NetworkCredential("anonymous", "");
                FtpWebResponse response = (FtpWebResponse)request.GetResponse();
                Stream responseStream = response.GetResponseStream();
                StreamReader reader = new StreamReader(responseStream);
                
                TreeViewItem root = new TreeViewItem() { Header = "ftproot"};
                
                var z = reader.ReadLine();
                TreeViewItem item = new TreeViewItem() { Header = z};
                root.Items.Add(item);
                while (z != null)
                {
                    z = reader.ReadLine();
                    item = new TreeViewItem() { Header = z };
                    root.Items.Add(item);
                }
                tr1.Items.Add(root);
                reader.Close();
                response.Close();

    Gruß,

    Ionut


    Mittwoch, 21. November 2012 14:24
  • Guten Abend,

    danke schon mal für die Antwort.

    Ich habe es vorhin einmal getestet, und das auslesen des Rootverzeichnisses funktioniert soweit. Wie kann ich das denn automatisieren, damit auch alle Unterordner und auch eventuell deren Unterordner usw. ausgelesen werden?

    Gruß Markus

    Mittwoch, 21. November 2012 17:50
  • Hallo Markus,

    wir hatten vor längerem mal eine Diskussion in FTP Ordnen und Dateien Recursive auslesen

    Dort gibt es mehrere Varianten zum Auslesen.
    Wobei man aber eher darauf verzichten sollte, alle Verzeichnisse auf einen Rutsch auszulesen, da das via FTP nicht das schnellste ist. Besser man ruft ein Verzeichnis erst ab, wenn der Anwender es aufklappt.

    Gruß Elmar


    Mittwoch, 21. November 2012 17:52
  • Hallo,

    danke für die schnelle Antwort.

    Die Verzeichnisse müssen nicht auf einmal ausgelesen werden.

    Es würde genügen den Inhalt beim öffnen zu laden, aber wie kann man beim auslesen des ersten Ordners in Erfahrung bringen, welche geladenen Elemente Ordner und welche Dateien sind. Und wie kann man den Ordnern dann den Expander hinzu fügen?

    Gruß Markus

    Mittwoch, 21. November 2012 18:13
  • Hallo Markus,

    bei FTP gibt es leider kein einheitliches Format für die Dateiauflistungen.

    Man muss die Daten zerlegen um an die notwendigen Informationen zu kommen.

    Die häufigsten beiden Varianten stellen entweder eine MS-DOS Auflistung bereit, wie man sie mit DIR erhält, oder aber dem äquivalenten UNIX Kommando "ls -l", daneben gibt es diverse Abwandlungen.

    In den Beispielen oben findest Du einige Varianten wie z. B:

      If line.Trim().ToLower().StartsWith("d") OrElse line.Contains(" <DIR> ") Then
    

    (die erste bezieht sich auf UNIX, die zweite auf die DOS Auflistung)

    In einem  Beitrag hatte ich auf einen Artikel hingewiesen, in dem eine umfassendere Lösung vorgestellt wird:
    http://www.blackbeltcoder.com/Articles/client/an-ftpclient-class-and-winform-control

    Gruß Elmar

    • Als Antwort markiert Numax09 Sonntag, 25. November 2012 18:02
    Mittwoch, 21. November 2012 19:38
  • Hallo Markus,

    Hat Dir die Antwort von Elmar geholfen? Wenn ja - bitte markiere diese "als Antwort".

    Danke und Gruß,
    Ionut

    Freitag, 23. November 2012 13:57