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. log4net--不可多得的开源日志记录组件

    log4net--不可多得的开源日志记录组件 1 前奏 一直在用log4net日志工具,却没时间写个日志给大家分享一下这个工具,趁最近比较空些,好好分享一下这个工具. 2 说明 Log4net介绍就不 ...

  3. 开源Word读写组件DocX 的深入研究和问题总结

    一. 前言 前两天看到了asxinyu大神的[原创]开源Word读写组件DocX介绍与入门,正好我也有类似的自动生成word文档得需求,于是便仔细的研究了这个DocX. 我也把它融入到我的项目当中并进 ...

  4. 突破自我,开源NetWorkSocket通讯组件

    前言 在<化茧成蝶,开源NetWorkSocket通讯组件>发表之后,收到大家很多个star,在此感谢!更可贵的是,一些网友提出了许多好建议,经过一些时间的思考,决定将NetworkSoc ...

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

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

  6. 【转】免费开源的FTP软件,FileZilla

    原文网址:http://baike.baidu.com/view/670329.htm?fr=aladdin FileZilla FileZilla是一个免费开源的FTP软件,分为客户端版本和服务器版 ...

  7. 开源word操作组件DocX的记录

    开源word操作组件DocX的记录 使用开源word操作组件DocX的记录 1.DocX简介 1.1 简介 DocX是一个在不需要安装word的情况下对word进行操作的开源轻量级.net组件,是由爱 ...

  8. 使用开源word操作组件DocX的记录

    1.DocX简介 1.1 简介 DocX是一个在不需要安装word的情况下对word进行操作的开源轻量级.net组件,是由爱尔兰的一个叫Cathal Coffey的博士生开发出来的.DocX使得操作w ...

  9. 开源NetWorkSocket通讯组件

    开源NetWorkSocket通讯组件   前言 在<化茧成蝶,开源NetWorkSocket通讯组件>发表之后,收到大家很多个star,在此感谢!更可贵的是,一些网友提出了许多好建议,经 ...

随机推荐

  1. 【7集iCore3基础视频】7-2 iCore3原理图介绍

    iCore3原理图介绍: 高清源视频:http://pan.baidu.com/s/1hsPkifM 密码:ei8ciCore3 购买链接:https://item.taobao.com/item.h ...

  2. mysql替换制定的内容的 类似正则表达式的功能

    content= 'asnfojassozxpdsgdspdps神龙架谁骄傲的骄傲搜ID飞机扫' SELECT content FROM test WHERE id =1 吧zx替换成ZZZZ UPD ...

  3. php一些特殊函数的使用实例详解

    <?php /* * PHP Array 函数大全 * * array() 创建数组. 3 array_change_key_case() 返回其键均为大写或小写的数组. 4 array_chu ...

  4. 使用 JavaScript 实现链表

    代码: <!doctype html> <html lang="en"> <head> <meta charset="UTF-8 ...

  5. Different Approaches for MVCC

    https://www.enterprisedb.com/well-known-databases-use-different-approaches-mvcc Well-known Databases ...

  6. linux常用操作指令

    Linux常用操作指令: 常用指令 ls        显示文件或目录 -l           列出文件详细信息l(list) -a          列出当前目录下所有文件及目录,包括隐藏的a(a ...

  7. [转]android:clipToPadding和android:clipChildren

    转自:http://www.tuicool.com/articles/32YRJrq android:clipToPadding和android:clipChildren 时间 2014-10-14 ...

  8. Decimal To Fraction 小数转换成分数

    以0.25为例, 0.25 * 100 = 25, 求25 和 100 的最大公约数gcd. 25/gcd 为分子. 100/gcd为分母. //小数转分数 //0.3 -> 3/10, 0.2 ...

  9. Neither the JAVA_HOME nor the JRE_HOME environment variable is defined At least one of these environment variable is needed to run this program

    开启tomcat时出现以上错误 // 进入root帐户 在普通用户也可以 sudo -s //用编辑器打开.bashrc文件 gedit .bashrc 在普通用户下注意加上sudo //在最后一行添 ...

  10. 在Unity中如何取得一个Box的Bounds

    private BoxCollider mCollider; // Use this for initialization void Start () { mCollider = GetCompone ...