Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

ENVOI DE FICHIER PAR FTP (SENDFILEFTP)


Information sur la source

Catégorie :Application Niveau : Débutant Date de création : 19/03/2003 Date de mise à jour : 01/05/2003 02:29:06 Vu / téléchargé: 12 018 / 1 741

Note :
8,5 / 10 - par 4 personnes
8,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (17)
Ajouter un commentaire et/ou une note

Description

Cette petite application permet de transferer les fichiers d'un répertoire sélectionner à un serveur FTP.

Facile a modifier pour faire du download de fichier (contactez moi :) )
Tout et dans le zip.

Pour éviter de télécharger le zip, je vous ai mis à dispo le code principa.  
 

Source

  • /* Contenu du main.h */
  • void SendFileFtp ( HWND, char [] );
  • /* DEFINE */
  • #define MAX_PATH 255
  • #define MAIN_LEN 255
  • #define NameFileIni "SendFileFTP.ini"
  • #define NameApp "SendFileFTP"
  • /*************************************************************/
  • /* Source du programme d'envoi de fichier pas protocol FTP
  • /*
  • /* Parametres :
  • /* 1. HWND du programme principal
  • /* 2. Repertoire to Send
  • /*
  • /* Retour :
  • /*
  • /* Créateur : Trinita
  • /* Copyright : Freeware
  • /* Date Création : 18/03/2003
  • /*
  • /* Date de Modification : 19/03/2003
  • /* Version : 1.0.0
  • /*
  • /************************************************************/
  • #include <string.h>
  • #include <stdio.h>
  • #include <Wininet.h>
  • #include <windows.h>
  • #include "main.h" /* Voir ci-dessus */
  • #include "logfile.h" /* Pour la fonction WriteInLogFile () */
  • #include "ressource.h" /* fichier .rc */
  • void SendFileFtp ( HWND hDlgSend, char DirFile[MAIN_LEN+1] )
  • {
  • /* Déclaration des variables */
  • /* init des variables */
  • char *Buffer = (char *) calloc(sizeof (char), MAIN_LEN+1);
  • char DirNameFileIni[MAIN_LEN+1]="";
  • char NameServeurFtp[MAIN_LEN+1]="";
  • char LoginFtp[MAIN_LEN+1]="";
  • char PwdFtp[MAIN_LEN+1]="";
  • char DirFtp[MAIN_LEN+1]="";
  • char FileToSend[MAIN_LEN+1]="";
  • bool ResultFtp;
  • char DirFileTmp[MAIN_LEN+1]="";
  • char TxtLog[MAIN_LEN+1]="";
  • /* Les handles */
  • HINTERNET hInternetSession; /* handle to internet connection */
  • HINTERNET hFTPSession; /* handle to FTP session */
  • HANDLE hfind; /* handle pour le parcours du dossier */
  • WIN32_FIND_DATA wfd; /* Structure du repertoire */
  • /* Récupération du chemin du fichier ini */
  • GetFullPathName( NameFileIni, MAIN_LEN+1, Buffer, NULL);
  • strcpy ( DirNameFileIni,Buffer );
  • /* Récupération des params */
  • GetPrivateProfileString ( "FTP" , "NAME_SERVEUR_FTP" , "" , NameServeurFtp , MAIN_LEN+1 , DirNameFileIni );
  • GetPrivateProfileString ( "FTP" , "LOGIN_FTP" , "" , LoginFtp , MAIN_LEN+1 , DirNameFileIni );
  • GetPrivateProfileString ( "FTP" , "PWD_FTP" , "" , PwdFtp , MAIN_LEN+1 , DirNameFileIni );
  • GetPrivateProfileString ( "FTP" , "DIR_FTP" , "" , DirFtp , MAIN_LEN+1 , DirNameFileIni );
  • /* Ouverture de la connexion */
  • hInternetSession = InternetOpen ( NameApp , INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
  • if ( hInternetSession == NULL )
  • {
  • /* Erreur dans l'ouverture de la connexion */
  • WriteInLogFile ( "Erreur dans l'ouverture de la connexion <InternetOpen>" );
  • exit;
  • }
  • /* Connexion au serveur FTP */
  • hFTPSession = InternetConnect ( hInternetSession, NameServeurFtp, INTERNET_DEFAULT_FTP_PORT, LoginFtp, PwdFtp, INTERNET_SERVICE_FTP, 0, 0);
  • if ( !hFTPSession )
  • {
  • WriteInLogFile ( "Erreur dans l'ouverture de la connexion ftp <InternetConnect>" );
  • exit;
  • }
  • else
  • {
  • /* Enregistrement des fichiers sur le serveur FTP */
  • /* Liste le contenu du répertoire et envoi fichier par fichier */
  • strcat ( DirFileTmp, DirFile );
  • strcat ( DirFileTmp, "\\*.*" );
  • hfind = FindFirstFile ( DirFileTmp, &wfd );
  • if (hfind != INVALID_HANDLE_VALUE)
  • {
  • do
  • {
  • if( wfd.cFileName[0] != '.')
  • {
  • /* Envoi du fichier courant */
  • strcpy ( FileToSend, DirFile);
  • strcat ( FileToSend, "\\");
  • strcat ( FileToSend, wfd.cFileName);
  • ResultFtp = FtpPutFile ( hFTPSession, FileToSend, wfd.cFileName, FTP_TRANSFER_TYPE_ASCII, NULL);
  • if ( !ResultFtp )
  • {
  • strcpy ( TxtLog, "Erreur Enregistrement du fichier ! <FtpPutFile>");
  • strcat ( TxtLog, FileToSend);
  • WriteInLogFile ( TxtLog );
  • }
  • }
  • }while(FindNextFile( hfind, &wfd));
  • FindClose(hfind);
  • }
  • /* Fermeture de la connexion ftp */
  • InternetCloseHandle ( hFTPSession );
  • }
  • /* Fermeture de la session */
  • InternetCloseHandle ( hInternetSession );
  • if ( strlen ( TxtLog) == 0)
  • {
  • MessageBox( hDlgSend ,"Opération terminée avec succès !!!!","Information",MB_OK|MB_ICONINFORMATION);
  • }
  • else
  • {
  • MessageBox( hDlgSend ,"Erreur dans l'envoi des fichiers consultez le fichier de trace !!!!","Erreur",MB_OK|MB_ICONWARNING);
  • }
  • return;
  • }
  /* Contenu du main.h */
void SendFileFtp ( HWND, char [] );

/* DEFINE */
#define MAX_PATH	255
#define MAIN_LEN	255

#define NameFileIni	"SendFileFTP.ini"
#define NameApp		"SendFileFTP"


/*************************************************************/
/*  Source du programme d'envoi de fichier pas protocol FTP	
/*						 
/*  Parametres :					
/*  1. HWND du programme principal			
/*  2. Repertoire to Send				
/*						
/*  Retour :
/*					
/*  Créateur : Trinita					
/*  Copyright : Freeware				
/*  Date Création : 18/03/2003				
/*						
/*  Date de Modification : 19/03/2003			
/*  Version : 1.0.0					
/*					
/************************************************************/

#include <string.h>
#include <stdio.h>
#include <Wininet.h>
#include <windows.h>

#include "main.h"	/* Voir ci-dessus */
#include "logfile.h"	/* Pour la fonction WriteInLogFile () */
#include "ressource.h"	/* fichier .rc */
	
void SendFileFtp ( HWND hDlgSend, char DirFile[MAIN_LEN+1] )
{
 /* Déclaration des variables */
 /* init des variables */
 char *Buffer = (char *) calloc(sizeof (char), MAIN_LEN+1);
 char DirNameFileIni[MAIN_LEN+1]="";				
 char NameServeurFtp[MAIN_LEN+1]="";
 char LoginFtp[MAIN_LEN+1]="";
 char PwdFtp[MAIN_LEN+1]="";
 char DirFtp[MAIN_LEN+1]="";
 char FileToSend[MAIN_LEN+1]="";
 bool ResultFtp;
 char DirFileTmp[MAIN_LEN+1]="";
 char TxtLog[MAIN_LEN+1]="";
	
 /* Les handles */
 HINTERNET hInternetSession;	/* handle to internet connection */
 HINTERNET hFTPSession;	/* handle to FTP session	*/
 HANDLE hfind;		/* handle pour le parcours du dossier */
 WIN32_FIND_DATA wfd;	/* Structure du repertoire */

 /* Récupération du chemin du fichier ini */
 GetFullPathName( NameFileIni, MAIN_LEN+1, Buffer, NULL);
 strcpy ( DirNameFileIni,Buffer );
	
 /* Récupération des params */
 GetPrivateProfileString ( "FTP" , "NAME_SERVEUR_FTP" , "" , NameServeurFtp , MAIN_LEN+1 , DirNameFileIni );
 GetPrivateProfileString ( "FTP" , "LOGIN_FTP" , "" , LoginFtp , MAIN_LEN+1 , DirNameFileIni );
 GetPrivateProfileString ( "FTP" , "PWD_FTP" , "" , PwdFtp , MAIN_LEN+1 , DirNameFileIni );
 GetPrivateProfileString ( "FTP" , "DIR_FTP" , "" , DirFtp , MAIN_LEN+1 , DirNameFileIni );
	
 /* Ouverture de la connexion */
 hInternetSession = InternetOpen ( NameApp , INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
 if ( hInternetSession == NULL )
 {
  /* Erreur dans l'ouverture de la connexion */
  WriteInLogFile ( "Erreur dans l'ouverture de la connexion <InternetOpen>" );
  exit;
 }
	
 /* Connexion au serveur FTP */
 hFTPSession = InternetConnect ( hInternetSession, NameServeurFtp, INTERNET_DEFAULT_FTP_PORT, LoginFtp, PwdFtp, INTERNET_SERVICE_FTP, 0, 0);
 if ( !hFTPSession )
 {
  WriteInLogFile ( "Erreur dans l'ouverture de la connexion ftp <InternetConnect>" );
  exit;
 }
 else
 {
  /* Enregistrement des fichiers sur le serveur FTP */
  /* Liste le contenu du répertoire et envoi fichier par fichier */
  strcat ( DirFileTmp, DirFile );
  strcat ( DirFileTmp, "\\*.*" );
  hfind = FindFirstFile ( DirFileTmp, &wfd );
  if (hfind != INVALID_HANDLE_VALUE)
  {
   do
   {
    if( wfd.cFileName[0] != '.')
    {
     /* Envoi du fichier courant */
     strcpy ( FileToSend, DirFile);
     strcat ( FileToSend, "\\");
     strcat ( FileToSend, wfd.cFileName);
     ResultFtp = FtpPutFile ( hFTPSession, FileToSend, wfd.cFileName, FTP_TRANSFER_TYPE_ASCII, NULL);
     if ( !ResultFtp )
     {
      strcpy ( TxtLog, "Erreur Enregistrement du fichier ! <FtpPutFile>");
      strcat ( TxtLog, FileToSend);
      WriteInLogFile ( TxtLog );
     }
    }
   }while(FindNextFile( hfind, &wfd));
   FindClose(hfind);
  }
	
 /* Fermeture de la connexion ftp */
 InternetCloseHandle ( hFTPSession );
 }
 /* Fermeture de la session */
 InternetCloseHandle ( hInternetSession );
	
 if ( strlen ( TxtLog) == 0)
 {
  MessageBox( hDlgSend ,"Opération terminée avec succès !!!!","Information",MB_OK|MB_ICONINFORMATION);
 }
  else
 {
  MessageBox( hDlgSend ,"Erreur dans l'envoi des fichiers consultez le fichier de trace !!!!","Erreur",MB_OK|MB_ICONWARNING);
 }
	
 return;

}
 

Conclusion

Fonctionnement

1. Parametrage du serveur FTP (les params sont enregistres dans un fichier ini)
2. Sélection du répertoire
3. Envoi des fichiers

Trinita,
Nota il faut la librairie wininet.lib    
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de pharaonix le 08/06/2003 16:11:00

euh, jai pris ta source car elle me semblait parfaite, et je men suis servi pour developper mon client ftp(pour la fonction connection) jusqua ce que je remarque que ma fonction ne marchait pas. apres deux heures, jai verifié ton prog, et il ne marche pas. pourtant pas derreurs, mais il nenvoie rien,e t ce chez pres de 8 personnes maintenant.
par exemeple, tu le test sur un ordi non connecté au net ou quoi que ce soit, tu tape freeftpperso avec login et pass, et tenvoi et hop, il te marque transfert reussi. il est fort!!! poru reussir sans internet.
pourtant ton code et correct, saurais-tu ce quil se passe?????

merci phara

signaler à un administrateur
Commentaire de pharaonix le 09/06/2003 13:26:21

en fait, je n'arrivais pas a le compiler car tu ne met pas wininet.lib et tu ne la lik pas, donc deja ca pouvais pas etre compiler.
par contre, cest bon ton prog marche.
merci pour ta source qui nous a grandement aidé

signaler à un administrateur
Commentaire de Trinita16 le 09/06/2003 21:43:23

Bein oui il fonctionne ! et pour la librairie wininet.lib il fallait lire le nota !
Car avec mon ide je ne link pas les librairies dans le source :)

signaler à un administrateur
Commentaire de sjasmin le 07/01/2004 00:48:02

j'ai essayé ton code et j'ai mis la librairie wininet.lib

par contre j'ai eu deux erreurs:
c:\program files\microsoft visual studio\vc98\include\wininet.h(48) : error C2146: syntax error : missing ';' before identifier 'HINTERNET'
c:\program files\microsoft visual studio\vc98\include\wininet.h(48) : fatal error C1004: unexpected end of file found

si tu sais ce que pourrais etre la raison merci bien

signaler à un administrateur
Commentaire de pharaonix le 07/01/2004 21:13:56

sjasmin. tu n'aurais pas visual 2003? Car le deuxieme probleme je l'ai vu chez de nombreuses personnes. c'est une des propriété du projet(precompilation des headers) qu'il te faut changer.
pour le ;. bah je suppose, qu'il en manque un :) essai de le mettre

signaler à un administrateur
Commentaire de vecchio56 le 14/01/2004 20:15:06 administrateur CS

sjasmin&gt; inclus &lt;windows.h&gt; avant &lt;wininet.h&gt;

signaler à un administrateur
Commentaire de albert0 le 08/05/2004 00:05:31

Salut all


d'abaord bravo et merci pour le source :)


mais voila j'ai une toute petit question:

Comment faut-il modifier le code pour ne pas etre obliger de selection un folder mais DIRECTEMENT LE fichier a uploader?


merci bcp

signaler à un administrateur
Commentaire de jereboss188 le 23/06/2005 15:51:56

Bonjour :)

Avant tout :) merci pour cette source car elle m'a aidé à comprendre pas mal de truc sur les connections, les handles etc etc :). Néanmoins, j'ai tout de même un problème :/ quand je veux transférer un fichier dans un dossier précis, il me met le fichier à la racine :/ est-ce normal? Comment pourrais-je remédier à ce probleme?

signaler à un administrateur
Commentaire de nicklink le 16/08/2005 15:01:36

Bonjour bonjour :)
Tout d'abord bravo pr la source,elle est bien commenté et permet donc une comprehension bien assister :D mais voila lorsque je compile g la meme erreur que Sjasmin cad :
c:\program files\microsoft visual studio\vc98\include\wininet.h(48) : error C2146: syntax error : missing ';' before identifier 'HINTERNET'
c:\program files\microsoft visual studio\vc98\include\wininet.h(48) : fatal error C1004: unexpected end of file found

Ensuite g fai comme ce qu'avait proposé Vecchio56 (cad placer le windows.h avant le wininet.h ,ca me vire ces 2 erreurs en compilant,0 erreurs et 0 warning sauf que lorsque je build le proj yen a 7 qu.Merciiiiii :D

signaler à un administrateur
Commentaire de Trinita16 le 22/08/2005 15:45:25

Pour jereboss188 :
En effet le fichier est mis à la racine du répertoire ftp. Je n'ai jamais pris le temps de chercher comment faire désolé :(

Pour nicklink :
Je n'utilise pas visual studio mais je pense qu'il te manque un lien vers la librairie dans ton projet.
Nota il faut la librairie wininet.lib

signaler à un administrateur
Commentaire de kgadhi le 01/12/2005 15:54:38

Bonjour Trinita16,

Tout d'abord merci pour la source. J'en ai vraiment besoin,
Mais voila, j'aimerais savoir comment je devrais faire pour modifier cette source pour que l'envoi soit automatique?

Merci pour votre aide.

signaler à un administrateur
Commentaire de jereboss188 le 01/12/2005 17:40:43

ne sois pas désolé pour ca ^^ y'a aucun probleme ca me donne un petit défi ;) merci encore et bonne continuation

signaler à un administrateur
Commentaire de Trinita16 le 06/12/2005 11:55:59

Pour KGADHI :
J'ai tout simplement créé un pti batch et une tâche planifiée.
Une autre solution consisterait à créer un service mais la ....

signaler à un administrateur
Commentaire de kgadhi le 06/12/2005 14:59:43

Bonjour Trinita 16 pour ta réponse,

Est ce que tu peux stp me donner plus de détail sur ce que tu as fait en utilisant le batch et la tache planifiée
ou bien si tu peux me donner le code source ça sera meilleur.

Merci d'avance.

signaler à un administrateur
Commentaire de Trinita16 le 26/12/2005 15:14:36

Oups, autant pour moi. J'y étais plus, il suffit de créer une tâche planifié sur le programme compilé c'est tout.

signaler à un administrateur
Commentaire de milie60 le 26/04/2007 12:09:55

Bonjour Trinita 16
Tout d'abord merci pour la source. Elle est trés intéressante,
Mais voila, j'aimerais savoir comment je devrais faire pour modifier cette source pour que je puisse Downloader des fichiers.
Merci d'avance.

signaler à un administrateur
Commentaire de djappaz le 28/12/2007 02:13:55

je sais que c'est bete comme question... mais comment je fais pour compiler tout ca avec dev c++ ???? :(

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 3,682 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.