65.9K
CodeProject 正在变化。 阅读更多。
Home

C# .NET FTP 组件

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.73/5 (24投票s)

2002年5月30日

1分钟阅读

viewsIcon

339393

downloadIcon

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 来判断文件是否为文件夹。GetFileNameGetFileSize 返回文件名和文件大小。

注意:文件集合在本版本中尚未实现,正如它应该的那样!

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();

希望这有帮助。欢迎提出任何意见。

© . All rights reserved.