Envoi de fichier par ftp (sendfileftp)

Soyez le premier à donner votre avis sur cette source.

Vue 16 463 fois - Téléchargée 1 984 fois

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

Ajouter un commentaire

Commentaires

Messages postés
1
Date d'inscription
jeudi 14 octobre 2010
Statut
Membre
Dernière intervention
25 octobre 2010

Bonjour j'aimerais savoir si quelqu'un pouvait m'aider car je voudrais savoir quelle est le code source pour envoyer un fichier automatiquement sur un ftp distant je n'y connais pas gd chose apar les bases , Merci de votre aide, j'en ai grandement besoin
Messages postés
1
Date d'inscription
mercredi 19 juillet 2006
Statut
Membre
Dernière intervention
28 décembre 2007

je sais que c'est bete comme question... mais comment je fais pour compiler tout ca avec dev c++ ???? :(
Messages postés
1
Date d'inscription
dimanche 9 avril 2006
Statut
Membre
Dernière intervention
26 avril 2007

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.
Messages postés
199
Date d'inscription
lundi 22 juillet 2002
Statut
Membre
Dernière intervention
14 juin 2006

Oups, autant pour moi. J'y étais plus, il suffit de créer une tâche planifié sur le programme compilé c'est tout.
Messages postés
121
Date d'inscription
mardi 9 août 2005
Statut
Membre
Dernière intervention
18 décembre 2007

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.
Afficher les 18 commentaires

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.