C#对FTP服务器操作类

要在 WinForms 应用程序中像访问本地文件夹一样访问 FTP 服务器上的文件夹,可以通过以下步骤实现:

1. 使用 FTP 访问远程服务器

你需要使用 FtpWebRequest 类来访问 FTP 服务器,并进行文件/文件夹的列表、上传和下载操作。

2. 显示目录结构

可以使用 TreeView 控件来显示 FTP 服务器的目录结构,并使用 ListView 控件来显示文件。通过与 FTP 服务器的连接,可以列出文件夹和文件,就像浏览本地文件系统一样。

3. 创建一个 FTP 客户端类

为了便于与 FTP 服务器交互,建议你封装一个 FTP 客户端类,提供下载、上传、列出目录等功能。

具体步骤

步骤 1:创建 FTP 客户端类

首先,创建一个封装 FTP 操作的类,包含列出目录、下载、上传等功能。

using System;
using System.IO;
using System.Net;
using System.Text;

public class FtpClient
{
    private string ftpServer;
    private string userName;
    private string password;

    public FtpClient(string ftpServer, string userName, string password)
    {
        this.ftpServer = ftpServer;
        this.userName = userName;
        this.password = password;
    }

    // 列出目录
    public string[] ListDirectory(string path)
    {
        string uri = "ftp://" + ftpServer + "/" + path;

        FtpWebRequest request = (FtpWebRequest)WebRequest.Create(uri);
        request.Method = WebRequestMethods.Ftp.ListDirectory;
        request.Credentials = new NetworkCredential(userName, password);

        using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
        using (StreamReader reader = new StreamReader(response.GetResponseStream()))
        {
            string directoryRaw = reader.ReadToEnd();
            return directoryRaw.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
        }
    }

    // 下载文件
    public void DownloadFile(string remoteFilePath, string localFilePath)
    {
        string uri = "ftp://" + ftpServer + "/" + remoteFilePath;

        FtpWebRequest request = (FtpWebRequest)WebRequest.Create(uri);
        request.Method = WebRequestMethods.Ftp.DownloadFile;
        request.Credentials = new NetworkCredential(userName, password);

        using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
        using (Stream responseStream = response.GetResponseStream())
        using (FileStream fs = new FileStream(localFilePath, FileMode.Create))
        {
            responseStream.CopyTo(fs);
        }
    }

    // 上传文件
    public void UploadFile(string localFilePath, string remoteFilePath)
    {
        string uri = "ftp://" + ftpServer + "/" + remoteFilePath;

        FtpWebRequest request = (FtpWebRequest)WebRequest.Create(uri);
        request.Method = WebRequestMethods.Ftp.UploadFile;
        request.Credentials = new NetworkCredential(userName, password);

        using (FileStream fs = new FileStream(localFilePath, FileMode.Open, FileAccess.Read))
        using (Stream requestStream = request.GetRequestStream())
        {
            fs.CopyTo(requestStream);
        }
    }
}
步骤 2:在 WinForms 中使用 TreeViewListView

使用 TreeView 控件显示文件夹,使用 ListView 控件显示文件。在用户选择文件或文件夹时,动态更新内容。

  1. 添加 TreeViewListView 控件到你的窗体中。
  2. 在加载时,通过 FtpClient.ListDirectory() 方法加载根目录到 TreeView 中。
public partial class MainForm : Form
{
    private FtpClient ftpClient;

    public MainForm()
    {
        InitializeComponent();
        ftpClient = new FtpClient("ftp.example.com", "username", "password");

        // 加载根目录
        LoadFtpDirectory("/");
    }

    // 加载目录
    private void LoadFtpDirectory(string path)
    {
        try
        {
            string[] directories = ftpClient.ListDirectory(path);
            foreach (var dir in directories)
            {
                TreeNode node = new TreeNode(dir);
                treeView1.Nodes.Add(node);  // 把目录加到 TreeView
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error: " + ex.Message);
        }
    }

    // 双击 TreeView 节点时,加载对应目录内容到 ListView
    private void treeView1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
    {
        string selectedPath = e.Node.Text;
        LoadFtpDirectory(selectedPath);  // 加载选中的文件夹
    }
}

步骤 3:处理文件的下载和上传

通过 ListView 控件,用户可以选择文件,右键菜单提供下载和上传的功能。

private void listView1_MouseClick(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Right)
    {
        ContextMenu contextMenu = new ContextMenu();
        MenuItem downloadItem = new MenuItem("下载", DownloadFile);
        contextMenu.MenuItems.Add(downloadItem);
        contextMenu.Show(listView1, e.Location);
    }
}

private void DownloadFile(object sender, EventArgs e)
{
    string remoteFilePath = listView1.SelectedItems[0].Text;  // 获取选中文件
    SaveFileDialog saveFileDialog = new SaveFileDialog();
    if (saveFileDialog.ShowDialog() == DialogResult.OK)
    {
        string localPath = saveFileDialog.FileName;
        ftpClient.DownloadFile(remoteFilePath, localPath);  // 下载文件
    }
}

总结:

  • TreeView 控件显示目录结构,ListView 显示文件列表。
  • 通过 FtpWebRequest 类实现与 FTP 服务器的交互,如列出文件、上传和下载。
  • 通过右键菜单和双击事件,支持用户下载和上传文件,提供类似访问本地文件系统的体验。

这样,用户可以通过 WinForms 的图形界面与 FTP 服务器交互,类似于本地文件系统的操作体验。

上一篇:vue登录页面


下一篇:【C++训练营】现代C++编程(隐藏)