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