Galmiza
Messages postés573Date d'inscriptionsamedi 16 novembre 2002StatutMembreDernière intervention 9 avril 2008
-
6 oct. 2006 à 18:09
Oeil_de_taupe
Messages postés150Date d'inscriptionsamedi 31 janvier 2004StatutMembreDernière intervention16 février 2009
-
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 ?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 6 oct. 2006 à 18:30
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.
Galmiza
Messages postés573Date d'inscriptionsamedi 16 novembre 2002StatutMembreDernière intervention 9 avril 20081 6 oct. 2006 à 18:24
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 );
Galmiza
Messages postés573Date d'inscriptionsamedi 16 novembre 2002StatutMembreDernière intervention 9 avril 20081 6 oct. 2006 à 18:33
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Oeil_de_taupe
Messages postés150Date d'inscriptionsamedi 31 janvier 2004StatutMembreDernière intervention16 février 2009 6 oct. 2006 à 21:12
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.
//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;
//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;
}