FluentFTP 是一个功能丰富的 .NET FTP 客户端库,它提供了一个简单而直观的 API 来执行各种 FTP 操作。本文将详细介绍 FluentFTP 的使用方法,并提供多个实用的例子。
1. 安装
首先,通过 NuGet 包管理器安装 FluentFTP:
Install-Package FluentFTP

2. 基本用法
2.1 连接到 FTP 服务器
static async Task Main(string[] args){    using (var client = new AsyncFtpClient("127.0.0.1", "admin", "123456"))    {        await client.Connect();        Console.WriteLine("Connected to FTP server!");
        // 执行其他操作...
        await client.Disconnect();    }}

2.2 列出目录内容
using (var client = new AsyncFtpClient("127.0.0.1", "admin", "123456")){    await client.Connect();
    foreach (var item in await client.GetListing("/"))    {        Console.WriteLine($"{item.Name} - {item.Modified} - {item.Size} bytes");    }}

中文乱码
static async Task Main(string[] args){    // 注册编码提供程序      Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
    // 确保控制台可以显示正确的字符      Console.OutputEncoding = Encoding.GetEncoding("GB2312");
    using (var client = new AsyncFtpClient("127.0.0.1", "admin", "123456"))    {        // 设置FTP客户端使用GB2312编码          client.Encoding = Encoding.GetEncoding("GB2312");
        await client.Connect();
        foreach (var item in await client.GetListing("/"))        {            Console.WriteLine($"{item.Name} - {item.Modified} - {item.Size} bytes");        }    }}
 
2.3 上传文件
using (var client = new AsyncFtpClient("127.0.0.1", "admin", "123456")){    await client.Connect();
    var status = await client.UploadFile(@"C:\local\file.txt", "/remote/file.txt");    if (status == FtpStatus.Success)    {        Console.WriteLine("File uploaded successfully!");    }}
2.4 下载文件
using (var client = new AsyncFtpClient("127.0.0.1", "admin", "123456")){    await client.Connect();
    var status = await client.DownloadFile(@"D:\output\1724843803807.png", "1724843803807.png");    if (status == FtpStatus.Success)    {        Console.WriteLine("File downloaded successfully!");    }}
3. 高级用法
3.1 创建目录
using (var client = new AsyncFtpClient("127.0.0.1", "admin", "123456")){    await client.Connect();
    var created = await client.CreateDirectory("/new_directory");    if (created)    {        Console.WriteLine("Directory created successfully!");    }}
3.2 删除文件
using (var client = new AsyncFtpClient("127.0.0.1", "admin", "123456")){    await client.Connect();
    var deleted = await client.DeleteFile("/remote/file_to_delete.txt");    if (deleted)    {        Console.WriteLine("File deleted successfully!");    }}
3.3 重命名文件或目录
using (var client = new AsyncFtpClient("127.0.0.1", "admin", "123456")){    await client.Connect();
    var renamed = await client.Rename("/old_name.txt", "/new_name.txt");    if (renamed)    {        Console.WriteLine("File renamed successfully!");    }}
3.4 检查文件是否存在
using (var client = new AsyncFtpClient("127.0.0.1", "admin", "123456")){    await client.Connect();
    var exists = await client.FileExists("/remote/file.txt");    Console.WriteLine($"File exists: {exists}");}
3.5 获取文件大小
using (var client = new AsyncFtpClient("127.0.0.1", "admin", "123456")){    await client.Connect();
    var size = await client.GetFileSize("/remote/file.txt");    Console.WriteLine($"File size: {size} bytes");}
3.6 上传整个目录
using (var client = new AsyncFtpClient("127.0.0.1", "admin", "123456")){    await client.Connect();
    var result = await client.UploadDirectory(@"C:\local\directory", "/remote/directory");    Console.WriteLine($"Uploaded {result.UploadedFiles.Count} files");    Console.WriteLine($"Failed to upload {result.FailedUploads.Count} files");}
3.7 下载整个目录
using (var client = new AsyncFtpClient("127.0.0.1", "admin", "123456")){    await client.Connect();
    var result = await client.DownloadDirectory(@"C:\local\directory", "/remote/directory");    Console.WriteLine($"Downloaded {result.DownloadedFiles.Count} files");    Console.WriteLine($"Failed to download {result.FailedDownloads.Count} files");}
3.8 使用 FTPS(FTP over SSL)
using (var client = new AsyncFtpClient("127.0.0.1", "admin", "123456")){    client.Config.EncryptionMode = FtpEncryptionMode.Explicit;    client.Config.ValidateAnyCertificate = true; // 在生产环境中应该使用proper证书验证
    await client.Connect();    Console.WriteLine("Connected to FTPS server!");
    // 执行其他操作...}
3.9 设置传输模式
using (var client = new AsyncFtpClient("127.0.0.1", "admin", "123456")){    client.Config.DataConnectionType = FtpDataConnectionType.PASV; // 使用被动模式
    await client.Connect();
    // 执行其他操作...}
4. 错误处理
FluentFTP 使用异常来处理错误。以下是一个错误处理的例子:
using (var client = new AsyncFtpClient("127.0.0.1", "admin", "123456")){    try    {        await client.Connect();
        await client.UploadFile(@"C:\local\file.txt", "/remote/file.txt");        Console.WriteLine("File uploaded successfully!");    }    catch (FtpAuthenticationException ex)    {        Console.WriteLine($"Authentication failed: {ex.Message}");    }    catch (FtpException ex)    {        Console.WriteLine($"FTP error occurred: {ex.Message}");    }    catch (Exception ex)    {        Console.WriteLine($"An error occurred: {ex.Message}");    }    finally    {        await client.Disconnect();    }}
5. 结论
FluentFTP 是一个功能丰富且易于使用的 FTP 客户端库。它提供了广泛的 FTP 操作支持,包括文件上传、下载、目录管理等。通过其流畅的 API 设计,你可以轻松地在 .NET 应用程序中集成 FTP 功能。
该文章在 2024/10/23 10:01:24 编辑过