编辑
2025-02-08
C# 应用
00
请注意,本文编写于 87 天前,最后修改于 87 天前,其中某些信息可能已经过时。

目录

1. 安装
2. 基本用法
2.1 连接到 FTP 服务器
2.2 列出目录内容
2.3 上传文件
2.4 下载文件
3. 高级用法
3.1 创建目录
3.2 删除文件
3.3 重命名文件或目录
3.4 检查文件是否存在
3.5 获取文件大小
3.6 上传整个目录
3.7 下载整个目录
3.8 使用 FTPS(FTP over SSL)
3.9 设置传输模式
4. 错误处理
5. 结论

FluentFTP 是一个功能丰富的 .NET FTP 客户端库,它提供了一个简单而直观的 API 来执行各种 FTP 操作。本文将详细介绍 FluentFTP 的使用方法,并提供多个实用的例子。

1. 安装

首先,通过 NuGet 包管理器安装 FluentFTP:

PowerShell
Install-Package FluentFTP

image.png

2. 基本用法

2.1 连接到 FTP 服务器

C#
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(); } }

image.png

2.2 列出目录内容

C#
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"); } }

image.png

中文乱码

C#
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"); } } }

image.png

2.3 上传文件

C#
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 下载文件

C#
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 创建目录

C#
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 删除文件

C#
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 重命名文件或目录

C#
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 检查文件是否存在

C#
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 获取文件大小

C#
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 上传整个目录

C#
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 下载整个目录

C#
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)

C#
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 设置传输模式

C#
using (var client = new AsyncFtpClient("127.0.0.1", "admin", "123456")) { client.Config.DataConnectionType = FtpDataConnectionType.PASV; // 使用被动模式 await client.Connect(); // 执行其他操作... }

4. 错误处理

FluentFTP 使用异常来处理错误。以下是一个错误处理的例子:

C#
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 功能。

本文提供的示例涵盖了从基本连接到高级操作的多个方面,应该能够满足大多数 FTP 相关的需求。无论是简单的文件传输还是复杂的 FTP 自动化任务,FluentFTP 都能胜任。

在使用 FluentFTP 时,请记住正确处理错误,并在生产环境中使用安全的连接方式(如 FTPS)。此外,对于大文件或大量文件的传输,请考虑使用异步方法和进度事件来提供更好的用户体验。

希望这篇文章对你有所帮助,祝你在 C# 开发中使用 FluentFTP 愉快!

本文作者:rick

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!