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 编辑过