Voici le code source d'un composant FTP ainsi qu'un squelette d'application
cliente FTP utilisant ce composant.
Les fonctionnalités FTP de base sont implémentées (Dir, Download, Upload, Delete,
Rename, ...).
Il s'agit là d'un exemple de code, et non d'une application complète testée.
Vous pouvez l'utiliser librement l'application, mais des bugs peuvent survenir
lors de l'utilisation.
Télécharger le code source : FTPCom.zip
(31 Ko)
Télécharger l'exécutable : FTPComExe
(32 Ko)
Attention, le
RunTime Microsoft .Net est indispensable pour exécuter le programme. (20,4
Mb)
Voici un exemple de code pour utiliser ce composant.
L'exemple est en C#, mais vous pouvez utiliser également ce composant avec tout
autre langage compatible avec le Framework .Net de Microsoft.
Utilisation du composant avec Visual Studio .Net
Ajouter le composant dans la ToolBox (customize Toolbox) et faites le glisser
sur votre feuille (form).
Le code projet contient un client FTP simple.
Vous aurez peut être à changer la Référence FTPCom dans votre projet pour tester
l'exemple.
Retirer l'ancienne référence et ajouter la référence (Add Reference) à FtpCom.DLL
Exemple de code
Se connecter au serveur FTP.
ftpc.Username = EFUsername.Text;
ftpc.Password = EFPassword.Text;
ftpc.Hostname = CBFTPServer.Text;
ftpc.Connect();
Une fois la connection établie, l'objet reçoit l'événement Connected,
il est alors possible d'envoyer la commande Login.
private void ftpc_Connected(object sender, FTPCom.FTPEventArgs e)
{
ftpc.Login();
}
L'événement Logged est envoyé après une connection réussie.
La méthode Dir() permet d'obtenir la liste des fichiers d'un dossier, ici la
racine du serveur.
private void ftpc_Logged(object sender, FTPCom.FTPEventArgs e)
{
ftpc.Dir();
}
L'événement DirCompleted Event est reçu quand la commande Dir est terminée.
La propriété FileCount contient le nombre de fichiers, utilisez IsFolder()
pour détecter s'il s'agit d'un fichier ou d'un dossier.
GetFileName() et GetFileSize() retournent le nom et la taille
des fichiers
Note : Une collection de fichiers devrait être implémentée ici ! pour
l'instant j'utilise un tableau.
private void ftpc_DirCompleted(object sender, FTPCom.FTPEventArgs e)
{
int i = 0;
int idimage = 0;
string msg;
msg = "Transfered " + e.TotalBytes.ToString() + " bytes in " + ((float)e.TimeElapsed / 1000).ToString() + " seconds" + CRLF;
TextLog.SelectionColor = Color.Black;
TextLog.AppendText(msg);
ServerView.BeginUpdate();
ServerView.Items.Clear();
ImgListServerSmall.Images.Clear();
ListViewItem lvItem = new ListViewItem("..");
ServerView.Items.Add(lvItem);
for (i = 0; i < ftpc.FileCount; i++)
{
if (ftpc.IsFolder(i))
{
string[] items = new String[2];
items[0] = ftpc.GetFileName(i);
items[1] = ftpc.GetFileSize(i).ToString();
ImgListServerSmall.Images.Add (m_IconFolder);
ServerView.Items.Add(new ListViewItem(items, idimage++));
}
}
for (i = 0; i < ftpc.FileCount; i++)
{
if (!ftpc.IsFolder(i))
{
string[] items = new String[2];
items[0] = ftpc.GetFileName(i);
items[1] = ftpc.GetFileSize(i).ToString();
ImgListServerSmall.Images.Add (ExtractIcon.GetIcon(items[0], false));
ServerView.Items.Add(new ListViewItem(items, idimage++));
}
}
ServerView.EndUpdate();
this.Cursor = Cursors.Default;
}
Pour Télécharger un fichier sur un glisser déposer dans la fenêtre locale :
private void ServerView_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (e.Button != 0)
{
string msg = "";
for (int i = 0; i < ServerView.SelectedItems.Count; i++)
{
msg += ServerView.SelectedItems[i].Text + "\n";
}
ServerView.DoDragDrop(msg, DragDropEffects.Copy | DragDropEffects.Move);
}
}
private void LocalView_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.Text))
e.Effect = DragDropEffects.Copy;
else
e.Effect = DragDropEffects.None;
}
private void LocalView_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
{
string msg = e.Data.GetData(DataFormats.Text).ToString();
string[] filename = msg.Split(new char[] { '\n' });
foreach (string sfile in filename)
{
ftpc.FileDownload(sfile);
}
}
Une fois le téléchargement terminé, l'événement FileDownloadCompleted
est émis
private void ftpc_FileDownloadCompleted(object sender, FTPCom.FTPEventArgs e)
{
string msg = "Transfered " + e.TotalBytes.ToString() + " bytes in " + ((float)e.TimeElapsed / 1000).ToString() + " seconds" + CRLF;
TextLog.SelectionColor = Color.Black;
TextLog.AppendText(msg);
FillLocalView(m_currentFolder);
}
Suppression des fichiers sélectionnés
for (int i = 0; i < ServerView.SelectedItems.Count; i++)
{
ftpc.Delete (ServerView.SelectedItems[i].Text);
}
ftpc.Dir();
Renommer un fichier
private void ServerView_AfterLabelEdit(object sender, System.Windows.Forms.LabelEditEventArgs e)
{
if (e.Label != null)
{
this.Cursor = Cursors.WaitCursor;
string newfilename = e.Label;
if (m_previousfilename == "New Folder")
{
ftpc.DirCreate(newfilename);
}
else
{
ftpc.Rename(m_previousfilename, newfilename);
}
ftpc.Dir();
}
}
Fermer la connection
ftpc.Disconnect();
ServerView.Items.Clear();
J'espère que cet exemple vous sera utile, les commentaires sont les bienvenus.
Jérôme Lacaille
Ingénieur développeur
Spécialiste en Nouvelles Technologies
Webmastering
/ Développement
|