C# .NET FTP 组件






4.73/5 (24投票s)
2002年5月30日
1分钟阅读

339393

5045
一个 C# FTP 组件和一个示例 FTP 客户端。
引言
这是我第一次编写 C# 组件,我决定实现一个 FTP 组件。这是使用该组件的示例代码。该组件代码目前不保证完全正常工作,但我认为它可能具有一定的参考价值,并且反馈将有助于改进或更正功能。
只需将组件添加到工具箱(使用自定义工具箱)并将其放置在您的窗体上。该项目包含一个简单的 FTP 客户端。您可能需要更改 TestFTPCom 项目中的 FTPCom 引用才能测试示例。删除旧引用并添加对 FtpCom.DLL 的引用。
示例代码
连接到 FTP 服务器
ftpc.Username = EFUsername.Text;
ftpc.Password = EFPassword.Text;
ftpc.Hostname = CBFTPServer.Text;
ftpc.Connect();
登录到服务器
当连接完成时,对象会接收到 Connected
事件,然后您可以发送登录命令。
private void ftpc_Connected(object sender, FTPCom.FTPEventArgs e)
{
ftpc.Login();
}
成功连接后会发送 Logged 事件
private void ftpc_Logged(object sender, FTPCom.FTPEventArgs e)
{
ftpc.Dir();
}
获取目录列表
当 Dir 命令完成时,会接收到 DirCompleted 事件。FileCount
包含文件数量,使用 IsFolder
来判断文件是否为文件夹。GetFileName
和 GetFileSize
返回文件名和文件大小。
注意:文件集合在本版本中尚未实现,正如它应该的那样!
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;
}
下载文件
通过本地视图拖放下载文件
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);
}
}
当文件下载完成时,会触发 FileDownloadCompleted
事件
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);
}
删除选定的文件
for (int i = 0; i < ServerView.SelectedItems.Count; i++)
{
ftpc.Delete (ServerView.SelectedItems[i].Text);
}
ftpc.Dir();
重命名文件
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();
}
}
关闭连接
ftpc.Disconnect();
ServerView.Items.Clear();
希望这有帮助。欢迎提出任何意见。