TIdFTP->List, Verzeichniss oder Datei??



  • Also ich habe folgendes Problem:
    Ich hol mir mir dem Indy FTP Client die Dateiliste vom FTP server:

    IFTP->List(LBTest->Items,".",false);
    

    Nun will ich bei Doppelklick auf ein Verzeichnis CD machen. Das ist ja weiter kein Problem, aber wie krieg ich raus ob das Item auf das Doppelgeklickt wurde überhaupt ein Verzeichnis ist?? Am naheliegendsten wäre warscheinlich die Extension zu überprüfen, aber das ist auch nicht 100% richtig! Nun hab ich mir gedacht, dass ich einfach 2 LIST aufrufe mache, und erst die Verzeichnisse, und dann die Dateien hole. (Dann merk ich mir einfach den Index vom letzen Verzeichniss...). Mite Welchen Parametern muss ich List aufrufen, um NUR die Verzeichnissname, und dann NUR die Dateinamen aufgelistet zu kriegen???
    Oder soll ichs einfach mit try und catch machen??



  • Die Indy-Doku zum Thema List hast du nicht gelesen, gell?

    -junix



  • doch hab ich, die die bei kylix dabei is... aber die is nur so delphi mäßig, vielleicht auch nich auf dem aktuellsten stand oda so...
    und wenn ichs mit * mach, dann krieg ich das in dem Format:
    /:
    datei1
    datei2
    ...
    /ordner1:
    datei1
    datei2
    ...
    /ordner2:
    datei1
    datei2
    ...

    oder was soll da sonst noch in der indy doku stehen??



  • also, hab mir jetzt mal neuen indy hilfe geholt, da stehat auch nichts anderes drin...



  • Hmmm ok, ich hab da wohl was falsch interpretiert, was da stand... allerdings könntest du dir auch die details ausgeben lassen und dann den access-string auswerten (wenn der vorderste Buchstabe ein d ist, dann ists ein Verzeichnis.)

    -junix



  • junix schrieb:

    Hmmm ok, ich hab da wohl was falsch interpretiert, was da stand... allerdings könntest du dir auch die details ausgeben lassen und dann den access-string auswerten (wenn der vorderste Buchstabe ein d ist, dann ists ein Verzeichnis.)

    -junix

    ja das hab ich mir auch schon überlegt, aber dann müsste ich den das irgendwie parsen lassen, und das krieg ich auch nich so richtig hin... hat da vielleicht jmd ein bsp??



  • äh was genau hast du denn schon versucht?

    -junix



  • ok thx für die hilfe! habs jetzt selber geschafft, alles in ein TListView zu schreiben! Wenn sich jmd. dafür intressiert so sieht das Parsen bei mir aus:

    bool __fastcall TForm1::bGetRemoteFileList()
    {
    TIdFTPListItems *FIsListItems;
    TListItem * LIItem;
    int i;
       if (bconnected) //bconnected ist ein bool, ob eine verbindung zum ftpserver besteht
       {
          IFTP->ListResult->Clear();
          IFTP->List(LBTest->Items,".",true);
          IFTP->DirectoryListing->LoadList(LBTest->Items); //Liste Laden
          FIsListItems = IFTP->DirectoryListing;
          LBTest->Items->Clear();
          LVRemoteFiles->Items->Clear(); //ListView leeren
          i = 0;
          while (i <= IFTP->ListResult->Count-1)
          {
             LIItem = LVRemoteFiles->Items->Add(); //Neuen Eintrag zur ListView
             IFTP->DirectoryListing->Parse(flfUnix,FIsListItems->Items[i]); //Eintrag Parsen flfUnix, weil es sich bei meinem Testserver um Unixserver handelt, kann auch flfDos etc.. sein
             LIItem->Caption = IFTP->DirectoryListing->Items[i]->FileName; //Als Text in ListView den Dateinamen
             LIItem->SubItems->Add(IFTP->DirectoryListing->Items[i]->Size); //Dateigröße
             if (IFTP->DirectoryListing->Items[i]->ItemType == ditDirectory) //3. Subitem kriegt je nach typ eine Anderen Text
             {
                LIItem->SubItems->Add("Verzeichnis");
             }
             else if (IFTP->DirectoryListing->Items[i]->ItemType == ditFile)
             {
                LIItem->SubItems->Add("Datei");
             }
             else if (IFTP->DirectoryListing->Items[i]->ItemType == ditSymbolicLink)
             {
                LIItem->SubItems->Add("Verknüpfung auf Datei");
             }
             LIItem->SubItems->Add(IFTP->DirectoryListing->Items[i]->ModifiedDate); //Datum
             LIItem->SubItems->Add(IFTP->DirectoryListing->Items[i]->OwnerPermissions+IFTP->DirectoryListing->Items[i]->GroupPermissions+IFTP->DirectoryListing->Items[i]->UserPermissions);//Rechte
             LIItem->SubItems->Add(IFTP->DirectoryListing->Items[i]->OwnerName);//Besitzer
             LIItem->SubItems->Add(IFTP->DirectoryListing->Items[i]->GroupName);//Gruppe
             i++;
          }
       }
    }
    

    Dafür benutz ich Indy 9 k.a. ob das mit anderen Versionen auch so geht!
    Mein ListView sieht dann ungefähr so aus:

    Name    | Größe | Typ         | Datum geändert | Attribute   | Besitzer | Gruppe |
    __________________________________________________________________________________
    tst.txt | 123   | Datei       | 16.10.1988     | rwxrwxrwx   | honk     | users  |
    folder  | 234   | Verzeichnis | 1.1.2009       | r--r--r--   | root     | root   |
    


  • sry, hab TreeView geschrieben, muss natürlich ListView heißen... habs jetzt verbessert...


Anmelden zum Antworten