FluentFTP 是一个开源的 .NET 库,用于轻松访问和管理 FTP 和 FTPS 服务器。它提供了一组直观且易于使用的 API,可以连接到服务器、上传和下载文件、创建和删除目录、列出目录内容等。

1、简介

FluentFTP 是一个功能强大的 .NET FTP 客户端库,主要简化与 FTP 服务器的交互。支持多种 .NET 平台,包括 .NET Framework 和 .NET Core。FluentFTP 支持以下平台:

  • .NET Standard 2.0 和更高版本
  • .NET Framework 4.5 和更高版本
  • .NET Core 2.0 和更高版本
  • .NET 5 和 .NET 6 等更高版本

2、安装引用 FluentFTP

无论是在 .NET Framework 项目,还是在 .NET Core 项目中。都可以通过 NuGet 包管理器来安装 FluentFTP,

1)使用Nuget界面管理器

搜索 "FluentFTP" 在列表中分别找到它,点击"安装"

相关文档VS(Visual Studio)中Nuget的使用

2)使用Package Manager命令安装

PM> Install-Package FluentFTP

3)使用.NET CLI命令安装

> dotnet add package FluentFTP

3、使用代码

FluentFTP 是一个功能强大且易于使用的 .NET 库,用于与 FTP 服务器进行交互。通过同步和异步方法,开发者可以轻松地在 FTP 服务器上执行文件操作。

1)同步示例

using System;
using System.Net;
using FluentFTP;
using FluentFTP.Exceptions;

class Program
{
    static void Main(string[] args)
    {
        // 创建FTP客户端
        var client = new FtpClient("ftp.example.com")
        {
            Credentials = new NetworkCredential("username", "password")
        };

        // 异常处理
        try
        {
            // 连接到FTP服务器
            client.Connect();
            Console.WriteLine("Connected to FTP server.");

            // 上传文件并报告进度
            client.UploadFile(
                @"C:\path\to\local\file.txt",
                "/remote/path/file.txt",
                FtpRemoteExists.Overwrite,
                false,
                FtpVerify.None,
                new Progress<FtpProgress>(p => {
                    Console.WriteLine($"Uploaded {p.TransferredBytes} / {p.TotalBytes} bytes");
                })
            );

            // 下载文件并报告进度
            client.DownloadFile(
                @"C:\path\to\local\downloaded_file.txt",
                "/remote/path/file.txt",
                FtpLocalExists.Overwrite,
                FtpVerify.None,
                new Progress<FtpProgress>(p => {
                    Console.WriteLine($"Downloaded {p.TransferredBytes} / {p.TotalBytes} bytes");
                })
            );

            // 删除文件
            client.DeleteFile("/remote/path/file.txt");
            Console.WriteLine("File deleted.");

            // 重命名文件
            client.Rename("/remote/path/old_file.txt", "/remote/path/new_file.txt");
            Console.WriteLine("File renamed.");

            // 创建目录
            client.CreateDirectory("/remote/path/new_directory");
            Console.WriteLine("Directory created.");

            // 列出目录内容
            foreach (var item in client.GetListing("/remote/path"))
            {
                Console.WriteLine(item.FullName);
            }

            // 删除目录
            client.DeleteDirectory("/remote/path/new_directory");
            Console.WriteLine("Directory deleted.");

        }
        catch (FtpException ex)
        {
            Console.WriteLine($"FTP error: {ex.Message}");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"General error: {ex.Message}");
        }
        finally
        {
            // 断开连接
            client.Disconnect();
            Console.WriteLine("Disconnected from FTP server.");
        }
    }
}

2)异步示例

using System;
using System.Net;
using System.Threading.Tasks;
using FluentFTP;
using FluentFTP.Exceptions;

class Program
{
    static async Task Main(string[] args)
    {
        // 创建FTP客户端
        var client = new FtpClient("ftp.example.com")
        {
            Credentials = new NetworkCredential("username", "password")
        };

        // 异常处理
        try
        {
            // 连接到FTP服务器
            await client.ConnectAsync();
            Console.WriteLine("Connected to FTP server.");

            // 上传文件并报告进度
            await client.UploadFileAsync(
                @"C:\path\to\local\file.txt",
                "/remote/path/file.txt",
                FtpRemoteExists.Overwrite,
                false,
                FtpVerify.None,
                new Progress<FtpProgress>(p => {
                    Console.WriteLine($"Uploaded {p.TransferredBytes} / {p.TotalBytes} bytes");
                })
            );

            // 下载文件并报告进度
            await client.DownloadFileAsync(
                @"C:\path\to\local\downloaded_file.txt",
                "/remote/path/file.txt",
                FtpLocalExists.Overwrite,
                FtpVerify.None,
                new Progress<FtpProgress>(p => {
                    Console.WriteLine($"Downloaded {p.TransferredBytes} / {p.TotalBytes} bytes");
                })
            );

            // 删除文件
            await client.DeleteFileAsync("/remote/path/file.txt");
            Console.WriteLine("File deleted.");

            // 重命名文件
            await client.RenameAsync("/remote/path/old_file.txt", "/remote/path/new_file.txt");
            Console.WriteLine("File renamed.");

            // 创建目录
            await client.CreateDirectoryAsync("/remote/path/new_directory");
            Console.WriteLine("Directory created.");

            // 列出目录内容
            foreach (var item in await client.GetListingAsync("/remote/path"))
            {
                Console.WriteLine(item.FullName);
            }

            // 删除目录
            await client.DeleteDirectoryAsync("/remote/path/new_directory");
            Console.WriteLine("Directory deleted.");

        }
        catch (FtpException ex)
        {
            Console.WriteLine($"FTP error: {ex.Message}");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"General error: {ex.Message}");
        }
        finally
        {
            // 断开连接
            await client.DisconnectAsync();
            Console.WriteLine("Disconnected from FTP server.");
        }
    }
}

参考文档 :https://github.com/robinrodricks/FluentFTP/wiki/Quick-Start-Example

推荐文档