Wininet FTP FtpFindFirstFile plusieurs fois [Résolu]

Galmiza 573 Messages postés samedi 16 novembre 2002Date d'inscription 9 avril 2008 Dernière intervention - 6 oct. 2006 à 18:09 - Dernière réponse : Oeil_de_taupe 150 Messages postés samedi 31 janvier 2004Date d'inscription 16 février 2009 Dernière intervention
- 6 oct. 2006 à 21:12
Salut à tous,

J'ai besoin de pouvoir ouvrir plusieurs handles vers des fichiers sur serveur FTP.
Or, je ne peux en ouvrir qu'un.
L'appel d'un autre FtpFindFirstFile renvoie 0.
Est-ce normal ou y a-t-il un moyen de résoudre le problème et comment ?

Merci
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 6 oct. 2006 à 18:30
3
Merci
MSDN nous dit:
FtpFindFirstFile is similar to the FindFirstFile function. Note, however, that only one FtpFindFirstFile can occur at a time within a given FTP session.
The enumerations, therefore, are correlated with the FTP session handle.
This is because the FTP protocol allows only a single directory enumeration per session.

Si donc FTP protocol ne veut pas...

ciao...
BruNews, MVP VC++

Merci BruNews 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 123 internautes ce mois-ci

Commenter la réponse de BruNews
Galmiza 573 Messages postés samedi 16 novembre 2002Date d'inscription 9 avril 2008 Dernière intervention - 6 oct. 2006 à 18:10
0
Merci
Je voulais dire ouvrir plusieurs handles en même temps.
Commenter la réponse de Galmiza
Galmiza 573 Messages postés samedi 16 novembre 2002Date d'inscription 9 avril 2008 Dernière intervention - 6 oct. 2006 à 18:24
0
Merci
Pour préciser un peu plus, j'utilise la dite fonction avec les paramètres.
HINTERNET hFind = FtpFindFirstFile(m_hFTPConnection, path, &wData, INTERNET_FLAG_RELOAD, 0);

Les path pour les appels de FtpFindFirstFile sont différents.

La connection ayant été initialisée ainsi (en retirant les étapes de vérification):
m_hInternetConnection = InternetOpen( "J-FTP", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0 );
m_hFTPConnection = InternetConnect( m_hInternetConnection, server, port, login, pass, INTERNET_SERVICE_FTP, 0, 0 );
Commenter la réponse de Galmiza
Galmiza 573 Messages postés samedi 16 novembre 2002Date d'inscription 9 avril 2008 Dernière intervention - 6 oct. 2006 à 18:33
0
Merci
Je suis désolé Brunews d'avoir posé une question dont la réponse était dans la doc MSDN.
Cependant, merci infiniment ;).
Je vais me débrouiller autrement...

Merci encore
Commenter la réponse de Galmiza
Oeil_de_taupe 150 Messages postés samedi 31 janvier 2004Date d'inscription 16 février 2009 Dernière intervention - 6 oct. 2006 à 21:12
0
Merci
Je me rappele avoir eu exectement le même problème pour lister le contenu d'un serveur FTP. Voilà la fonction que j'avais faite pour outrepasser cette limite. Il n'y a aucune assurance qu'elle marche! Je l'ai fait il y a plusieurs années. Je te laisse regarder si des bouts t'intéresse.

void ListElement(CFile* fEcriture, HINTERNET HwndFTP, char* chmFTP)
{

    //Parcours tous les fichier et dossier
    WIN32_FIND_DATA fEnum;
    //Sauvegarde dans le tas des dossiers
    WIN32_FIND_DATA* ficEnr = new WIN32_FIND_DATA[20];
   
    //Recupere le premier fichier et modification du chemin
    char* arbFichier = new char[strlen(chmFTP)+255];
    strcpy(arbFichier, chmFTP);
    strcat(arbFichier, "/");

    //Recherche du premier fichier
    HINTERNET premFichier = FtpFindFirstFile(HwndFTP, arbFichier, &fEnum, NULL, NULL);

    //Test de la validité du handle
    if(!premFichier)
    {
        cout << "Erreur de handle" << endl;
        return;
    }

    //Initialise la variable qui compte le nb de dossier
    int nbDossier = 0;
    do
    {   
        //Filtre dossier et fichier
        if (!(fEnum.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
        {
            //Affiche les fichiers
            cout << "F:" << fEnum.cFileName << endl;
            char* AjoutFichier = new char[255];
            strcpy(AjoutFichier,fEnum.cFileName);
            strcat(AjoutFichier, "\r\n");
            fEcriture->Write(AjoutFichier, strlen(AjoutFichier));
            delete [] AjoutFichier;
        }else{
            //Affiche les dossier et les enregistre
            //cout << "D:" <<  fEnum.cFileName << endl;

            if(nbDossier < 19)
            {
                *(ficEnr + nbDossier) = fEnum;
                nbDossier++;
            }

        }
    }while(InternetFindNextFile(premFichier, &fEnum));

    //Ferme le handle de recherche de fichier dans le rep
    InternetCloseHandle(premFichier);

    //Traite maintenant les dossier du rep, pour pouvoir tous les inspecter
    for(int i = 0; i < nbDossier; i++)
    {
        char* arbSousFich = new char[strlen(chmFTP)+255];
        strcpy(arbSousFich, arbFichier);
        strcat(arbSousFich, (ficEnr+i)->cFileName);
        ListElement(fEcriture, HwndFTP, arbSousFich);
        delete [] arbSousFich;
    }

    delete [] ficEnr;
    delete [] arbFichier;

}
Commenter la réponse de Oeil_de_taupe

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.