edtFTPnet官方网站:
http://www.enterprisedt.com/products/edtftpnet/

目前最新版本为2.2.3,下载后在bin目录中找到edtFTPnet.dll,在项目中添加引用。
下面为一些用法:

1、FTP服务器根目录为web,在它下面创建如下图示的目录和上传文件
FTPConnection.CommandEncoding = Encoding.GetEncoding("GBK") 指定GBK编码以支持中文文件名
FTPConnection.CreateDirectory() 创建指定目录
FTPConnection.ChangeWorkingDirectory() 切换到指定目录
FTPConnection.UploadFile() 上传文件

web
|-----L11
      |-----L21            
            |-----L31
                  |-----31.htm
            |-----21.htm
      |-----L22
      |-----11.htm
      |-----目录.txt

private const string ftpServerIP = "xx.xx.xx.xx";
private const string ftpRemotePath = "web";
private const string ftpUserID = "user";
private const string ftpPassword = "123";
 
private void btnCreateAndUpload_Click(object sender, EventArgs e)
{         
    using (var conn = new FTPConnection
    {
        ServerAddress = ftpServerIP,
        ServerDirectory = ftpRemotePath,
        UserName = ftpUserID,
        Password = ftpPassword,
        CommandEncoding = Encoding.GetEncoding("GBK")
    })
    {
        conn.Connect();               
 
        //创建目录L11
        conn.CreateDirectory("L11");
 
        //============切换当前工作目录到L11============
        conn.ChangeWorkingDirectory("L11");
        //上行代码也可以用conn.ServerDirectory = "L11";
 
        //上传"文档.txt"
        conn.UploadFile("文档.txt", "文档.txt");
 
        //创建子目录L21,L22
        conn.CreateDirectory("L21");
        conn.CreateDirectory("L22");
 
        //在当前工作目录L11上传文件"L11.htm"
        conn.UploadFile("11.htm", "11.htm");
 
        //============切换当前工作目录到L21============
        conn.ChangeWorkingDirectory("L21");
 
        //上传文件21.htm
        conn.UploadFile("21.htm", "21.htm");
        //创建目录L31
        conn.CreateDirectory("L31");
 
        //============切换当前工作目录到L31============
        conn.ChangeWorkingDirectory("L31");
 
        //上传文件31.htm
        conn.UploadFile("31.htm", "31.htm");
    }
}

2、获取文件信息
FTPConnection.GetFileInfos() 获取文件和目录详细信息,结果的一个属性Dir为true表示为目录,否则为文件

private void btnList_Click(object sender, EventArgs e)
{
    using (var conn = new FTPConnection
    {
        ServerAddress = ftpServerIP,
        ServerDirectory = ftpRemotePath,
        UserName = ftpUserID,
        Password = ftpPassword,
        CommandEncoding = Encoding.GetEncoding("GBK")
    })
    {
        conn.Connect();
        //获取指定目录的所有子目录和文件信息
        conn.ChangeWorkingDirectory("L11/L21");              
        var files1 = conn.GetFileInfos();
        ShowFileInfos(files1);
        /*结果如下:
         File, /web/L11/L21/21.htm, 21.htm, 11.2KB, 2013-9-26 14:51:00
         Dir, /web/L11/L21/L31, L31, 0KB, 2013-9-26 14:51:00
         */
 
        ////返回上级目录,例子中为web/L11
        conn.ChangeWorkingDirectoryUp();
        var files2 = conn.GetFileInfosRecursive();
        ShowFileInfos(files2);
        /*结果如下:
        File, /web/L11/11.htm, 11.htm, 59.4KB, 2013-9-26 14:51:00
        Dir, /web/L11/L21, L21, 0KB, 2013-9-26 14:51:00
        Dir, /web/L11/L22, L22, 0KB, 2013-9-26 14:51:00
        File, /web/L11/文档.txt, 文档.txt, 40.8KB, 2013-9-26 14:51:00
        File, /web/L11/L21/21.htm, 21.htm, 11.2KB, 2013-9-26 14:51:00
        Dir, /web/L11/L21/L31, L31, 0KB, 2013-9-26 14:51:00
        File, /web/L11/L21/L31/31.htm, 31.htm, 5.6KB, 2013-9-26 14:51:00
         */
    }
}     
void ShowFileInfos(FTPFile[] files)
{
    foreach (var file in files)
    {
        string info = string.Format("{0}, {1}, {2}, {3}KB, {4}",
            file.Dir ? "Dir" : "File", file.Path, file.Name, Math.Round(file.Size / 1024.0, 1), file.LastModified);
        richTextBox1.AppendText(info + "\r\n");
    }
    richTextBox1.AppendText("\r\n");
}

其中递归获取指定目录的所有子目录和文件信息的扩展方法GetFileInfosRecursive如下:

public static class FtpClientExtensions
{
    /// <summary>
    /// 递归获取目录的所有子目录和文件信息
    /// </summary>
    public static FTPFile[] GetFileInfosRecursive(this FTPConnection conn)
    {
        var resultList = new List<FTPFile>();
        var fileInfos = conn.GetFileInfos();
        resultList.AddRange(fileInfos);
        foreach (var fileInfo in fileInfos)
        {
            if (fileInfo.Dir)
            {
                conn.ServerDirectory = fileInfo.Path;
                resultList.AddRange(conn.GetFileInfosRecursive());
            }
        }
        return resultList.ToArray();
    }
    /// <summary>
    /// 递归删除目录(包括所有子目录和文件信息)
    /// </summary>
    public static void DeleteDirectoryRecursive(this FTPConnection conn, string directoryName)
    {
        conn.ChangeWorkingDirectory(directoryName);
        var fileInfos = conn.GetFileInfos();
        foreach (var fileInfo in fileInfos)
        {
            if (fileInfo.Dir)
                conn.DeleteDirectoryRecursive(fileInfo.Name);
            else
                conn.DeleteFile(fileInfo.Name);
        }
        conn.ChangeWorkingDirectoryUp();
        conn.DeleteDirectory(directoryName);
    }
}

3、删除目录及所有子目录和文件
FTPConnection.DeleteDirectory()当删除的目录不为空时,会出错,需递归删除,
递归删除目录扩展方法DeleteDirectoryRecursive见上面类FtpClientExtensions

private void btnDelete_Click(object sender, EventArgs e)
{
    using (var conn = new FTPConnection
    {
        ServerAddress = ftpServerIP,
        ServerDirectory = ftpRemotePath,
        UserName = ftpUserID,
        Password = ftpPassword,
        CommandEncoding = Encoding.GetEncoding("GBK")
    })
    {
        conn.Connect();             
        //递归删除目录及所有子目录和文件
        conn.DeleteDirectoryRecursive("L11");
        //如果删除单个文件,路径为当前目录的相对路径
        //conn.DeleteFile("L11/11.htm");
    }
}

.net 开源 FTP 组件 edtFTPnet的更多相关文章

  1. 开源.NET FTP组件edtFTPnet 用法

    edtFTPnet官方网站:http://www.enterprisedt.com/products/edtftpnet/ 目前最新版本为2.2.3,下载后在bin目录中找到edtFTPnet.dll ...

  2. JAVA 中不错的开源FTP组件:commons-net

    第一步:引入jar到pom.xml. <!-- https://mvnrepository.com/artifact/commons-net/commons-net --> <dep ...

  3. Win7下的内置FTP组件的设置详解

    在局域网中共享文件,FTP是比较方便的方案之一.Win7内部集成了FTP,只是设置起来颇费一番功夫.着文以记之. 一.安装FTP组件 由于Win7默认没有安装FTP组件.故FTP的设置第一步就是安装F ...

  4. 不错的开源FTP类库

    socket开源ftp类库代码:http://netftp.codeplex.com/ 需要注意事项,如果以下代码出现乱码问题,可以设置其中的Encoding属性就可以. 用法示例: using Sy ...

  5. Net Core开源通讯组件 SmartRoute

    Net Core开源通讯组件 SmartRoute(服务即集群) SmartRoute是基于Dotnet Core设计的可运行在linux和windows下的服务通讯组件,其设计理念是去中心化和零配置 ...

  6. 开源通讯组件ec

    跨平台开源通讯组件elastic communication elastic communication是基于c#开发支持.net和mono的通讯组件(简称EC),EC的主要目的简化mono和.net ...

  7. .NET开源Protobuf-net组件修炼手册

    一.前言 Protocol Buffer(简称Protobuf或PB) 是一个跨平台的消息交互协议,类似xml.json等 :别只会用Json和XML了,快来看看Google出品的Protocol B ...

  8. .NET开源Protobuf-net组件葵花手册

    一.前言 我们都知道 protobuf是由Google开发的一款与平台无关,语言无关,可扩展的序列化结构数据格式,可用做数据存储格式, 通信协议 ! 在前面<.NET开源Protobuf-net ...

  9. centos7安装 ftp 组件与开放防火墙端口命令

    Linux 安装 ftp 组件 安装完后,有/etc/vsftpd/vsftpd.conf 文件,是 vsftp 的配置文件. 1.执行 yum -y install vsftpd 2. 添加一个 f ...

随机推荐

  1. R语言简单介绍

    R语言 概述 R语言是用于统计分析,图形表示和报告的编程语言和软件环境. R语言由Ross Ihaka和Robert Gentleman在新西兰奥克兰大学创建,目前由R语言开发核心团队开发. R语言的 ...

  2. All-in-One Office,不容错过的办公插件

      WPS Office是由金山自主研发的一款办公软件套装,具备办公软件最常用的文字.表格.演示等多种功能. 这款国产办公软件不仅免费,而且具有内存小.海量模板.兼容性强.操作更加符合中国人使用习惯等 ...

  3. 浅析servlet

    目录 Servlet简介 Servlet定义 Servlet的特点 Servlet底层原理 Servlet GenericServlet HttpServlet Servlet的生命周期 Servle ...

  4. 前端知识体系:JavaScript基础-原型和原型链-理解原型设计模式以及 JavaScript中的原型规则

    理解原型设计模式以及 JavaScript中的原型规则(原文地址) 1.原型对象:我们创建的每一个函数(JavaScript中函数也是一个对象)都有一个原型属性 prototype,原型属性实质上是一 ...

  5. mongodb的安装与使用(三)之 pymongo

    (一)连接MongoClient 连接MongoDB我们需要使用PyMongo库里面的MongoClient,一般来说传入MongoDB的IP及端口即可,第一个参数为地址host,第二个参数为端口po ...

  6. BZOJ 1022 / P4279 Luogu [SHOI2008]小约翰的游戏 (反Nim游戏) (Anti-SG)

    题意 反Nim游戏,两人轮流选一堆石子拿,拿到最后一个的输.问先手是否必胜. 分析 怎么说,分类讨论? 情形1:首先考虑最简单的情况,所有石子数都为1.那么奇数堆石子为必败,偶数为必胜 情形2:然后考 ...

  7. py操作mongodb总结

    python使用的版本 python3. python操作mongodb使用的是pymongo,安装方法: pip install pymongo 测试 PyMongo 接下来我们可以创建一个测试文件 ...

  8. 2、创建MFC应用程序——基于对话框,时间计时器

    使用计时器更新MFC界面时间,频率1s. 文件——新建项目——MFC应用程序,下一步,选择基于对话框,其他默认,完成. 双击窗体(或者鼠标右键)进入类向导,自动创建Ontimer()函数 void C ...

  9. 013_STM32程序移植之_DS18B20

    013_STM32程序移植之_DS18B20 1. 测试环境:STM32C8T6 2. 测试模块:DS18B20模块 3. 测试接口: 1. DS18B20模块接口: DS18B20引脚        ...

  10. 【csp模拟赛2】黑莲花--数据结构+数论

    没有什么能够阻挡,你对被阿的向往.天天 AK 的生涯,你的心了无牵挂. 虐过大佬的比赛,也曾装弱装逼.当你低头的瞬间,才发现旁边的人. 把你的四肢抬起来,使劲地往门上撞.盛开着永不凋零,黑莲花. —— ...