[.Net] 操作Ftp的库FluentFTP用法
2018-08-09 本文已影响823人
无衔
FluentFTP.dll个人下载地址:https://pan.baidu.com/s/1SjMZIyFSkisp9N9fv6k3Qg 密码:69iy
这是个客户端Ftp功能的实现。使用还比较顺畅,没有遇到什么坑。看了下底层是Socket实现的,没有什么别的依赖。
先给版本信息

看下引用关系


应注意下有个潜在的问题:FtpClient作为Ftp的客户端程序,依赖了System.Web。如果用MS推荐的客户端程序开发仅依赖.Net Framework Client Profile的话是不行的。而且部署在一般用户本地也可能会出问题。所以开发时应该用.Net Framework的完整版以及确认用户也装.Net Framework完整版而非Client Profile。
简单使用
使用核心类FtpClient的构造函数,4个参数的版本
public FtpClient(string host, int port, string user, string pass);
就可以做很多基本操作了
public void CreateDirectory(string path);
public bool Download(Stream outStream, string remotePath);
public void DeleteDirectory(string path, FtpListOption options);
public FtpListItem[] GetListing();
这里贴一个遍历文件夹获取文件的功能
void LoadFtpFileRecursion(FtpClient client, String dir, ref List<FtpListItem> list, ref Dictionary<string, Exception> errorDirDic)
{
FtpListItem[] items = null;
try
{
string safeDir = dir.Replace("/", @"\").ToLower();
items = client.GetListing(safeDir);
}
catch (Exception ex)
{
errorDirDic.Add(dir, ex);
return;
}
foreach (FtpListItem item in items)
{
if (item.Type == FtpFileSystemObjectType.Directory)
{
LoadFtpFileRecursion(client, item.FullName, ref list, ref errorDirDic);
}
else if (item.Type == FtpFileSystemObjectType.File)
{
list.Add(item);
}
}
}
一些需要注意的地方
1)比如以上代码的
string safeDir = dir.Replace("/", @"\").ToLower();
items = client.GetListing(safeDir);
要求ftp的目录必须用同一个分隔符。比如这样的路径"/dir1/dir2/dir3"是可以的,
"\dir1\dir2\dir3"也是可以的。但是有"\"也有"/"的不行,比如"\dir1\dir2/dir3/"
2)如果路径不存在
GetListing不会报错。会返回0个元素。
如果是删除文件时给了一个不存在的路径
client.DeleteFile(relativePath);
会得到异常,FtpCommandException fex且fex.CompletionCode == "550"