NMFTP -> Auflisten von Verzeichnissen/Dateien



  • Hi @ all,

    Ich hab mir mal ein bisschen die NMFTP funktion angeschaut. Ich schffe es zwar den Inhalt eines FTP Servers in einer ListBox auszugeben und auch den Verzeichniswechsel zu realisieren aber damit bin ich noch nicht ganz zufrieden.

    Die Dateien und Ordner werden alle querbeet angezeigt. Ich würde aber gerne alle Ordner oben anzeigen und alle Dateien darunter. Außerdem wären Icons vor den Dateien oder zumindest vor den Ordnern ganz nett.

    Kann mir jemand sagen wie ich das so auflisten kann?

    MfG
    Donar



  • Hallo

    weder deine Sortierreihenfolge noch deine Icons werden durch FTP geregelt, das must du schon selbst machen.
    Für die sortierreihenfolge must du also erstmal anhand der mitgelieferten Dateiattribute sortieren und dann erst die sortierte Reihenfolge in einem Control anzeigen.
    Die Icons kannst du mit der WinAPI-Funktion ExtractAssociatedIcon auslesen, Darstellung erfolgt je nach deinem verwendeten Control.

    bis bald
    akari



  • Hmm, ja ... dass die FTP Funktion das nicht macht dachte ich mir schon. Wie kann ich die Dateiattribute denn auslesen? Und wie muss ich sie dann ordnen?

    Die Funktion ExtractAssociatedIcon finde ich in der Hilfe überhaupt nicht ...

    Hab net all zu viel Ahnung von C++ ... arbeite eigentlich mit php aber da ist die ftp funktion einfach zu langsam!

    MfG
    Donar



  • Donar schrieb:

    Hmm, ja ... dass die FTP Funktion das nicht macht dachte ich mir schon. Wie kann ich die Dateiattribute denn auslesen? Und wie muss ich sie dann ordnen?

    Die Dateiattribute bekommst du bei dem List-Aufruf des FTP-Servers mit. Schau in die BCB-Hilfe zu TNMFTP oder in das Beispiel.
    Die Anordnung must du schon selber machen. Du brauchst also je eine dynamische, nichtvisuelle Liste für die Datei- und die Verzeichnisnamen, zum Beispiel TStringList. Dann kannst du jeden neuen Eintrag aus dem FTP-List eintragen je nach Verzeichnis-Attribut eintragen, die Sortierung nach namen erfolgt automatisch.
    Ist alles eingetragen, überträgst du diese beiden Listen in deine visuellen Controls.

    Donar schrieb:

    Die Funktion ExtractAssociatedIcon finde ich in der Hilfe überhaupt nicht ...

    Ich habe ja gesagt das es eine WinAPI-Funktion von Microsoft ist, also must du in der MSDN nachschauen.

    bis bald
    akari





  • Hmm, hab jetzt erstmal versucht mir eine Stringlist anzulegen in die ich die List() ergebnisse speicher. Aber ich weiß nicht wie ich sie da rein bekomme. Hab es folgendermaßen versucht:

    void __fastcall TForm1::NMFTP1ListItem(AnsiString Listing)
    {
      TStringList *FTPInhalt = new TStringList;
      try
      {
        FTPInhalt->AddStrings(Listing);
      }
      __finally
      {
        delete FTPInhalt;
      }
    }
    

    aber dan bekomm ich die Fehlermeldung, dass die Konvertierung von AnsiString nach TString nicht möglich ist. Aber irgendwie muss ich sie doch einfügen.

    Selbst wenn ich den FTP-Inhalt in der Stringliste speichern könnte ... wir könnte ich es dann sortieren und nur die Ordner-/Dateinamen in meiner Sichtbaren liste ausgeben?

    Und wie kann ich überhaupt prüfen ob ich eine Datei oder einen Ordner auf dem FTP anwähle? Wenn ich eine Datei wähle bekomm ich natürlich den Fehler, dass in das Verzeichnis nicht gewechselt werden kann ...

    Gibt es irgendwelche Beispielprogramme mit Quelltext für einen FTP Mini-Client oder so??

    C++ is irgendwie ganz schön kompliziert 😉

    MfG
    Donar



  • Falscher Ansatz:

    Du muss das Ergebnis der FTP abfrage parsen

    Danach,

    - ob es ein Directory ist
    - ob es eine Datei ist
    - nach dem Datum und der Zeit
    - nach der Dateigröße
    - nach den Rechten

    Ob es ein Diretory ist, erkennst du an den Rechten.

    Dann suchst du etwas, in dem du dieses Infos wiederabrufbar speicherst. In einer TStringList kann du die Infos nicht einzeln speichern. Da bietet sich eher eine Listview oder ein Grid an.

    Leiter benutzt du ja das in BCB 2006 nicht mehr vorhandene NMFTP. Für INDY könnte ich das bieten
    [url]
    http://www.marquardtnet.info/cecke/programme.4/pocketftp.4k/4k_pocketftp.html[/url]



  • Ob Indy oder NMFTP ist mir eigentlich egal ... zu Indy hab ich nur nichts in der Hilfedatei gefunden 😉

    Thx für den Link ... ich schau mir das mal an ... ich find da nur keinen Quelltext

    MfG
    Donar



  • Schicke doch mal eine eMail an den Autor



  • Hmm, ich weiß zwar nicht warum er den Quellcode raus rücken sollte aber Fragen kostet ja nichts.

    //Edit: Oder bist du der Programmierer davon? Der Name passt auf jeden fall 😉

    Kann mir niemand ein Beispiel nennen wie ich den Quelltext Formulieren muss um zu erkennen was ein Ordner ist und was nicht? Ich kenn von C++ nur das was ich in der Schule gelernt hat ... und das war nicht viel ...

    MfG
    Donar



  • Weil du schon in der Schule nichts gelernt hast willst du hier auch nicht erst gross nachdenken!? Merkwürdige Einstellung.

    Wie bereits gesagt, werte das Ergebnis der Auflistung aus. Ich habe grade keine Doku zur Hand, glaube mich aber zu erinnern, dass in der von NMFTP gelieferten Liste für jedes Item ein oder meherere SubItems existieren, die u.a. die Dateiattribute enthalten.


Anmelden zum Antworten