Transfert FTP

cs_Darkukai Messages postés 38 Date d'inscription vendredi 27 septembre 2002 Statut Membre Dernière intervention 29 mai 2006 - 24 janv. 2003 à 17:09
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 - 31 août 2004 à 02:37
bonjour à tous
je dois dévelloper un petit exe qui s'identifie et envoie un fichier sur un serveur ftp avec des paramètres rentrer par l'utilisateur (user,pass,source,destination, et ip du serveur)
pouvez vous m'indiquez si un tel projet a déjà été fait et ou je pourrais trouver des sources ou des exemple car la je nage dans le brouillard :)

Merci d'avance

4 réponses

MegaMickx Messages postés 24 Date d'inscription lundi 30 septembre 2002 Statut Membre Dernière intervention 17 juillet 2003
22 févr. 2003 à 18:49
Salut,

Moi j'en ais fait un programme avec des transfert en FTP
Voici le code qui doit te permettre de te connecter a un serveur et de
télécharger les fichiers présent sur ce dernier:

#include
#include<stdio.h>
#include<direct.h>

HINTERNET hInternetSession;          // handle to internet connection
HINTERNET hFTPSession;               // handle to FTP session
HINTERNET hFileConnection;           // handle to file enumeration
WIN32_FIND_DATA sWFD;                // structure to hold FIND data
FILE *trace;

int __cdecl main(int argc,char *argv[])
{
     int erreur,nb,n,i,premier=0;
     BOOL result,resultF;
     char adresse_ip[100];
     char login[100];
     char mot_de_passe[100];
     char fichier_dest[150];
     char fichier_trace[150];
     char fichier_dest2[180];
     char chaine[500];
     char nom_fic[150];
     char temp[180];
     char nouv[150];
     char chemin_fichier[75];

     if(argc<5)
     {
          printf("Il manque des arguments");
          return 1;
     }

     strcpy(adresse_ip,argv[1]);
     strcpy(login,argv[2]);
     strcpy(mot_de_passe,argv[3]);
     strcpy(fichier_dest,argv[4]);

     sprintf(temp,
                         "%*.*s",
                         strrchr(fichier_dest,'\\')-fichier_dest,
                         strrchr(fichier_dest,'\\')-fichier_dest,
                         fichier_dest
                         );
     sprintf(nouv,"%s_sauvegarde",temp);

     sprintf(chemin_fichier,
                         "%*.*s",
                         strrchr(temp,'\\')-temp+1,
                         strrchr(temp,'\\')-temp+1,
                         temp
                         );

     erreur=_mkdir(temp);

     sprintf(fichier_trace,"%strace_MAJ_LM.txt",fichier_dest);
     trace=fopen(fichier_trace,"w");

     // Open Internet Session
     HINTERNET hSession;
     hSession = InternetOpen("toto", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL,
0);

     if (hSession)
     {
          printf("\nConnexion au serveur FTP");
          // Connexion au serveur FTP
          HINTERNET hService;
          hService = InternetConnect(hSession, adresse_ip,
                         INTERNET_DEFAULT_FTP_PORT, login, mot_de_passe,
                         INTERNET_SERVICE_FTP, 0, 0);

          if(!hService)
          {
               nb=fwrite("Connexion à l'ordinateur distant
impossible\n",sizeof( char ),43,trace);
               printf("Connexion à l'ordinateur distant impossible\n");
          }

          for(i=0;i5 && i<=(argc-4))
                         {
                              if(i>=2)
                              {
                                   FtpSetCurrentDirectory(hService,"..");
//On revient un repertoire en arrière
                              }
                              printf("Nom du dossier a recuperer <%s>
\n",argv[4+i]);
                              result= FtpSetCurrentDirectory(hService,
argv[4+i]);    //Recherche un repertoire sur le serveur et si trouvé on se
place dedans
                              if (result != TRUE)
                              {
                                   nb=fwrite("repertoire impossible a
trouver sur le serveur FTP\n",sizeof( char ),50,trace);
                                   printf("repertoire impossible a trouver
sur le serveur FTP");
                              }

                         strcpy(temp,fichier_dest);
                         strcat(temp,argv[4+i]);
                         sprintf(temp,"%s%s",argv[4],argv[4+i]);
                         erreur=_mkdir(temp);
                         sprintf(fichier_dest,"%s\",temp);
                         }
                    }
                    //Recherche le nom du premier fichier du repertoire

                    hFileConnection = FtpFindFirstFile(hService,"*",
&sWFD,0,0);

                    memset(nom_fic,'\0',sizeof(nom_fic));
                    strcpy(nom_fic,sWFD.cFileName);

                    strcpy(fichier_dest2,fichier_dest);
                    strcat(fichier_dest2,nom_fic);

                    // Téléchargement du fichier
                    result = FtpGetFile(hService, nom_fic, fichier_dest2,
0, 0, FTP_TRANSFER_TYPE_BINARY, 0);
                    DWORD error_two = GetLastError();

                    //Gestion des erreurs pour le transfert de fichier +
ecriture fichier de trace
                    if(result!=1)
                    {
                         strcpy(chaine,"Transfert du fichier ");
                         strcat(chaine,nom_fic);
                         strcat(chaine," impossible\n");
                         n=strlen(chaine);
                         nb=fwrite(chaine,sizeof( char ),n,trace);
                         printf("Transfert du fichier %s impossible\n",
nom_fic);
                    }
                    else
                    {
                         strcpy(chaine,"Fichier ");
                         strcat(chaine,nom_fic);
                         strcat(chaine," transféré avec succès\n");
                         n=strlen(chaine);
                         nb=fwrite(chaine,sizeof( char ),n,trace);
                         printf("\nFichier %s transfere\n", nom_fic);

                    }
               }

               resultF=1;     //Initialisation de resultF à 1 pour pouvoir
rentrer dans la boucle
               while(resultF==1)   //resultF=1 -> tant qu'on trouve des
fichiers on continu
               {
                    //Cherche le nom des fichiers suivants
                    resultF = InternetFindNextFile(hFileConnection, &sWFD);

                    memset(nom_fic,'\0',sizeof(nom_fic));
                    strcpy(nom_fic,sWFD.cFileName);

                    strcpy(fichier_dest2,fichier_dest);
                    strcat(fichier_dest2,nom_fic);

                    // Téléchargement du fichier
                    result = FtpGetFile(hService, nom_fic, fichier_dest2,
0, 0, FTP_TRANSFER_TYPE_BINARY, 0);
                    DWORD error_two = GetLastError();

                    //Gestion des erreurs pour le transfert de fichier +
ecriture fichier de trace
                    if(result!=1)
                    {
                         strcpy(chaine,"Transfert du fichier ");
                         strcat(chaine,nom_fic);
                         strcat(chaine," impossible\n");
                         n=strlen(chaine);
                         nb=fwrite(chaine,sizeof( char ),n,trace);
                         printf("Transfert du fichier %s impossible\n",
nom_fic);
                    }
                    else
                    {
                         strcpy(chaine,"Fichier ");
                         strcat(chaine,nom_fic);
                         strcat(chaine," transféré avec succès\n");
                         n=strlen(chaine);
                         nb=fwrite(chaine,sizeof( char ),n,trace);
                         printf("\nFichier %s transfere\n", nom_fic);
                    }
               }
               result=InternetCloseHandle(hFileConnection);
          }

     // Close the FTP connection
     InternetCloseHandle(hService);
     }

     // Close the Internet connection
     InternetCloseHandle(hSession);

     fclose(trace);
     printf("\nFin du prog");
     return 0;
}


Voici l'ordre des paramèttres que tu dois envoyer lors de l'appelle du
programme:
1) Adresse IP ou nom de la machine du serveur FTP
2) Login de la connexion
3) Mot de passe de la connexion
4) Chemin en local ( Exemple: c:\test\ )
5) Dossier a transférer se trouvant sur le serveur (il faut donner le nom
du dossier qui se trouve sur le serveur si tu veux le transférer)

ATTENTION: Le fichier de destination sur la machine local doit-être créé
avant de lancer le prog!!!

Voila, bon courage
MegaMickx :big)
0
cs_demsy Messages postés 4 Date d'inscription mercredi 29 octobre 2003 Statut Membre Dernière intervention 19 novembre 2003
19 nov. 2003 à 12:18
Si tu pouvais commenter ton programme, ca me ferait plaisir
0
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
31 août 2004 à 00:35
bon je sais que ceci a été fait il y a un certain, mais je suis en train de developpez une application, qui a besoin de transféré un fichier sur un serveur ftp... mais je me pose une question, sur le fonction "InternetConnect" et plus precisement sur le second param !!!
en fait il faut marqué l'adresse IP de "l'adresse ftp", mais on peut vraiment pas mettre l'adresse texto?
si non, comment on fait pour recuperer cette adresse IP?
Bob...

"La chance accorde ses faveurs aux esprits avertis..."
0
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
31 août 2004 à 02:37
non c'est bon j'ai la reponse a ma question !!!
Bob...

"La chance accorde ses faveur aux esprits avertis..."
0
Rejoignez-nous