Voilà j'ai un client FTP qui doit recupérer tous les fichiers ayant le même nom que le fichier ayant une extension ".exe"
Voici mon code (simplifié) :
//connexion : hInternetSession = InternetOpen(L"Client FPT", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL,0); hFtpSession = InternetConnect(hInternetSession, hote, (INTERNET_PORT)port, user, pass, INTERNET_SERVICE_FTP, 0, 0); //liste des fichiers ayant pour nom le fichier de reference.exe HINTERNET h_lstFTP = NULL; std::wstring commandeList = L"NLST "+ nomDuRepertoirAParcourir + fichierDeReference+L"*"; FtpCommand(hFtpSession, TRUE, FTP_TRANSFERT_TYPE_BINARY, commandeList.c_str(), 0, &lstFTP ); char ret [4096]; DWORD dwBytesread; if(InternetReadFile(h_lstFTP,ret, 4095,&dwBytesread){ std::wcerr<<L"Erreur InternetReadFile\n"; }else{ ret[dwBytesread]=0; } std::wstring str1 = convertionConstCharToWChar(ret); std::wstring strSortie; for (std::wstring::iterator it = str1.begin(); itStr != str1.end(); ++itStr) { if( *itStr != 0x0D ){ strSortie.push_back(*itStr); } } boost::algorithm::split(ListNomDeFichier, strSortie, boost::algorithm::is_any_of(L"\x0A")); InternetCloseHandle(h_lstFTP); for( std::list<std::wstring>::iterator itLFich = ListNomDeFichier.begin(); itLFich != ListNomDeFichier.end(); ++itLFich ){ //... HINTERNET hFile; //recuperation de la taille hFile = FtpOpenFile(hFTPSession, cheminVersFichierATelecahrger, GENERIC_READ, FTP_TRANSFERT_BINARY,NULL); if(FtpGetSize(hFile) == 0 ){ std::cout<<"fichier de taille 0"; } InternetCloseHandle(hFile); if(!FtpGetFIle(hFTPSession, cheminVersFichierATelecahrger, cheminDuFichierEnLocal, NULL, FILE_ATTRIBUTE_NORMAL,0,NULL)){ std::wcerr<<"Erreur "<<GetLastError()<<"\n"; //... } //... }
Le souci c'est que le serveur FTP sur lequel je me connecte est sous Linux et je dois déployer le client sur une machine (pas très ressente) en Windows (windows 2000 avec la sp4). Et j'ai lors du téléchargement du fichier l'erreur 12003 ! Par conséquent lorsque j'affiche la raison de cette erreur via la fonction : InternetGetLastResponseInfo();
Il me répond : "150 opening binary mode data connction for "nomdufichier.exe"
Ce qui est un comportement "normale".
Dans la MSDN on m'informe que l'erreur vient du faite que les 2 machines ne se comprennent pas bien et qu'il faut utiliser l'indicateur INTERNET_FLAG_PASSIVE comme flag pour la fonction InternetConnect().
Sauf que ça ne fonctionne pas il me renvoi l'erreur 12029...
J'ai pas ce problème avec des machines ressentes sous windows 2000.
Ce qui m'incite à venir exposer mon problème aux personnes expérimentés :P
Merci