InternetFindNextFile



  • Hallo, ich habe ein Problem mit InternetFindNextFile.
    Ich will mir den inhalt eines bestimten FTP Ordners anzeigen lassen.
    Dazu verwende ich folgenden code:

    HINTERNET session, ftp, hFtpFind;
    WIN32_FIND_DATA FindData;
    ftp = NULL;
    
    session = InternetOpen("FTP-Session", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, INTERNET_FLAG_ASYNC);
    ftp = InternetConnect(session, m_cServer, 21, m_cUsername, m_cPasswd, INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
    
    if (ftp != NULL)
    {
        FtpSetCurrentDirectory(ftp, m_cPath);
        hFtpFind = FtpFindFirstFile(ftp, "*.*", &FindData, INTERNET_FLAG_RELOAD, NULL);
        // 1. Dateinamen verarbeiten	
        while(InternetFindNextFile(hFtpFind, &FindData)) 
        {
            // Verarbeitung der weiteren Dateinamen
        }
    }
    else
        MessageBox("FTP-Verbindung konnte nicht hergestellt werden. Bitte überprüfen Sie Ihre Einstellungen");
    

    Der 1. eintrag der mit FtpFindFirstFile gefunden wurde is immer korrekt.
    Die whileschleife jedoch beendet sich immer mit false. Ich bekomme somit immer nur den ersten dateinamen. was mache ich faltsch?
    Danke schonmal im vorraus 🙄



  • Hallo,

    wenn du asynchrone Operationen ausführst (INTERNET_FLAG_ASYNC), dann kann es sein, daß Funktionen mit ihrer Aufgabe noch nicht fertig sind, und deswegen scheitern. Probiere zunächst einmal, INTERNET_FLAG_ASYNC wegzulassen:

    ...
    session = InternetOpen("FTP-Session", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
    ...
    

    wenn das nichts hilft, dann mit GetLastError den Fehler abfragen:

    if (ftp != NULL)
    {
        FtpSetCurrentDirectory(ftp, m_cPath);
        hFtpFind = FtpFindFirstFile(ftp, "*.*", &FindData, INTERNET_FLAG_RELOAD, NULL);
        // 1. Dateinamen verarbeiten    
        while(InternetFindNextFile(hFtpFind, &FindData)) 
        {
            // Verarbeitung der weiteren Dateinamen
        }
    
        DWORD dwError = GetLastError();
        if (dwError == ERROR_NO_MORE_FILES) MessageBox("Keine (weiteren) Dateien gefunden");
        else
        {
           CString strError;
           strError.Format("%d", dwError);
           MessageBox(strError);
        }
    }
    else
        MessageBox("FTP-Verbindung konnte nicht hergestellt werden. Bitte überprüfen Sie Ihre Einstellungen");
    

    wenn du schon MFC verwendest, warum nutzt du nicht die Klassen CFtpFileFind, CFtpConnection, CInternetSession usw..? Hat zwar jetzt nichts mit dem Problem zu tun, aber ich wollte nur darauf hinweisen, daß es diese Klassen gibt, falls nicht bekannt.

    MfG



  • ja.. das war der fehler. Vielen dank!


Anmelden zum Antworten