Introduction
For my first experience writing a C# component I decided to implement an FTP Component. This is the sample code to use the component. The component code is not really guaranteed to work fine in this state, but I thought that it might be of some interest and that feedback will help to improve or correct features.
Simply add the component to the ToolBox (Using customize Toolbox) and put it on your form. The code project contains a simple FTP Client. You may have to change FTPCom Reference in TestFTPCom project to test the sample. Remove the old reference and Add Reference to FtpCom.DLL
Sample Code
Connect to the FTP Server
ftpc.Username = EFUsername.Text;
ftpc.Password = EFPassword.Text;
ftpc.Hostname = CBFTPServer.Text;
ftpc.Connect();
Logging in to the server
When the connection is completed, the object receives the event Connected
, you can then send the Login Command.
private void ftpc_Connected(object sender, FTPCom.FTPEventArgs e)
{
ftpc.Login();
}
The event Logged is sent after successful connection
private void ftpc_Logged(object sender, FTPCom.FTPEventArgs e)
{
ftpc.Dir();
}
Getting a directory listing
The DirCompleted event is received when Dir command is completed FileCount
contains the number of files, use IsFolder
to find if File is a folder. GetFileName
and GetFileSize
return the name and the size of the files
Note : File Collection is not implemented in this version as it should be!
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;
}
Downloading a file
File Download on Local View drag drop
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);
}
}
When downloading a file is complete the FileDownloadCompleted
event is fired
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);
}
Deleting selected files
for (int i = 0; i < ServerView.SelectedItems.Count; i++)
{
ftpc.Delete (ServerView.SelectedItems[i].Text);
}
ftpc.Dir();
Rename a file
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();
}
}
Close the connection
ftpc.Disconnect();
ServerView.Items.Clear();
Hope this help. Any comments are welcome.