Envoi de fichier par ftp (sendfileftp)

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 / Exemple :


/* 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

Codes Sources

A voir également

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.