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