[.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"

上一篇 下一篇

猜你喜欢

热点阅读