Indy FTP List



  • Hallo zusammen,

    ich verzweifel gerade an der List() Methode von IndyFTp und hoffe Ihr könnt mir weiterhelfen.

    Ziel ist das Bearbeiten von Bilddateien auf einem NAS (FTP ist aktiviert).
    Dazu möchte ich mittels List die Dateinamen in einer Stringliste speichern.

    #pragma link "IdFTP" //hab im Netz gelesen, das könnte helfen
    #pragma link "IdAllFTPListParsers" //hab im Netz gelesen, das könnte helfen
    #include <IdAllFTPListParsers.hpp> //hab im Netz gelesen, das könnte helfen
    #include "IdFTP.hpp" 
    
    __fastcall TForm1::TForm1(TComponent* Owner)
    	: TForm(Owner)
    {
    	TStringList* pListOfFSCData2  = new TStringList();
    
    	IdFTP2= new TIdFTP();
     	IdFTP2->Host="192.168.1.109";
    	IdFTP2->Port=21;
    	IdFTP2->Username="admin";
    	IdFTP2->Password="admin";
    	IdFTP2->AutoLogin=false;
    	IdFTP2->Connect();
    	IdFTP2->Login();
    	if(IdFTP2->Connected())
    	{
    
    		IdFTP2->ChangeDir("/homes/admin/Test");
    		IdFTP2->TransferType=ftBinary;
    	}
    	IdFTP2->List(pListOfFSCData2);
    }
    

    Beim List kommt immer die Fehlermeldung: der Klasse EIdReadTimeout'Zeitüberschreitung beim Lesen'.

    Bis zum List Aufruf (den ich mit allen Parameterübergabekombinationen ausprobiert hab) ist der Code soweit korrekt glaube ich. Habe ausprobiert Verzeichnisse zu erstellen und Dateien zu löschen, dass hat ohne Probleme funktioniert.

    Habt Ihr eine Idee warum Die Fehlermeldung kommt und wie ich sie beheben kann?

    Danke schonmal 🙂



  • Versuch mal folgendes:

    IdFTP2->List("*");
    for(int i = 0; i < IdFTP2->DirectoryListing->Count; ++i)
    {
      TIdFTPListItem *Item = IdFTP2->DirectoryListing->Items[i];
      if (Item->ItemType == ditFile) 
        pListOfFSCData2->Add(Item->FileName);
    }
    

    eventuell mußt du auch noch ein paar zusätzliche Header einbinden, bei meinem Projekt waren folgende eingebunden:

    #include <IdBaseComponent.hpp>
    #include <IdComponent.hpp>
    #include <IdExplicitTLSClientServerBase.hpp>
    #include <IdFTP.hpp>
    #include <IdTCPClient.hpp>
    #include <IdTCPConnection.hpp>
    #include <IdAllFTPListParsers.hpp>
    


  • @Linnea_nologon
    Danke für die schnelle Antwort.

    Die Header habe ich jetzt alle eingebunden.

    Beim Aufruf:

    IdFTP2->List(pListOfFSCData2); = Fehlermeldung: der Klasse EIdReadTimeout'Zeitüberschreitung beim Lesen'.
    IdFTP2->List(); = Fehlermeldung: der Klasse EIdReadTimeout'Zeitüberschreitung beim Lesen'.

    --> bekannte Fehlermeldung

    IdFTP2->List(pListOfFSCData2,""); = Fehlermeldung: der Klasse EIdReplyRFCError'No such file or directory'.
    IdFTP2->List("
    "); = Fehlermeldung: der Klasse EIdReplyRFCError'No such file or directory'.

    --> Neue Fehlermeldung, deswegen vermute ich es lag nicht an den Headern, sondern den Übergabeparametern.

    Mit Bildname 00200_150616113658.jpg

    IdFTP2->List(pListOfFSCData2,"00200_150616113658.jpg"); = Fehlermeldung: der Klasse EIdReplyRFCError'00200_150616113658.jpg is not a directory'.

    --> Das sieht ja schonmal verständlich aus... Das Bild ist natürlich kein Ordner, deswegen die Fehlermeldung.
    Aber heißt das jetzt ich verwende die Funktion falsch? ich möchte ja eigentlich auf die Datein bzw. deren Dateinamen zugreifen.



  • schau mal hier -> Link



  • So habe den Fehler gefunden 😃
    Die verdammte Windows-Firewall hat die Ausführung der Funktion blockiert 👎

    [code="cpp"]
    delete WindwosFirewall; // 😡
    [code]


Log in to reply