开源.NET FTP组件edtFTPnet 用法
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 用法的更多相关文章
- .net 开源 FTP 组件 edtFTPnet
edtFTPnet官方网站:http://www.enterprisedt.com/products/edtftpnet/ 目前最新版本为2.2.3,下载后在bin目录中找到edtFTPnet.dll ...
- log4net--不可多得的开源日志记录组件
log4net--不可多得的开源日志记录组件 1 前奏 一直在用log4net日志工具,却没时间写个日志给大家分享一下这个工具,趁最近比较空些,好好分享一下这个工具. 2 说明 Log4net介绍就不 ...
- 开源Word读写组件DocX 的深入研究和问题总结
一. 前言 前两天看到了asxinyu大神的[原创]开源Word读写组件DocX介绍与入门,正好我也有类似的自动生成word文档得需求,于是便仔细的研究了这个DocX. 我也把它融入到我的项目当中并进 ...
- 突破自我,开源NetWorkSocket通讯组件
前言 在<化茧成蝶,开源NetWorkSocket通讯组件>发表之后,收到大家很多个star,在此感谢!更可贵的是,一些网友提出了许多好建议,经过一些时间的思考,决定将NetworkSoc ...
- Win7下的内置FTP组件的设置详解
在局域网中共享文件,FTP是比较方便的方案之一.Win7内部集成了FTP,只是设置起来颇费一番功夫.着文以记之. 一.安装FTP组件 由于Win7默认没有安装FTP组件.故FTP的设置第一步就是安装F ...
- 【转】免费开源的FTP软件,FileZilla
原文网址:http://baike.baidu.com/view/670329.htm?fr=aladdin FileZilla FileZilla是一个免费开源的FTP软件,分为客户端版本和服务器版 ...
- 开源word操作组件DocX的记录
开源word操作组件DocX的记录 使用开源word操作组件DocX的记录 1.DocX简介 1.1 简介 DocX是一个在不需要安装word的情况下对word进行操作的开源轻量级.net组件,是由爱 ...
- 使用开源word操作组件DocX的记录
1.DocX简介 1.1 简介 DocX是一个在不需要安装word的情况下对word进行操作的开源轻量级.net组件,是由爱尔兰的一个叫Cathal Coffey的博士生开发出来的.DocX使得操作w ...
- 开源NetWorkSocket通讯组件
开源NetWorkSocket通讯组件 前言 在<化茧成蝶,开源NetWorkSocket通讯组件>发表之后,收到大家很多个star,在此感谢!更可贵的是,一些网友提出了许多好建议,经 ...
随机推荐
- 【转】统计模型-n元文法
在谈N-Gram模型之前,我们先来看一下Mrkove假设: 1.一个词的出现仅仅依赖于它前面出现的有限的一个或者几个词: 2.一个词出现的概率条件地依赖于前N-1个词的词类. 定义 N-Gram是大词 ...
- 《Linux内核分析》第七周 读书笔记
<深入理解计算机系统>CHAPTER7阅读梳理 [学习时间:3hours] [学习内容:链接需要的代码&数据:链接机制:链接生成的目标文件] 一.链接概述 1.链接 定义:链接是将 ...
- Maintaining Your Signing Identities and Certificates 维护你的签名标识和证书
Code signing your app lets users trust that your app has been created by a source known to Apple and ...
- iScroll.js几个问题及其解决办法
1.在一个页面中需要点击tab切换,而且每个切换的内容都需要下拉刷新加载,这个时候需要在点击的时候用到myScroll.refresh();这个函数,刷新iScroll.js这个函数. 2.在页面中有 ...
- Oracle的日期时间范围查询
Oracle日期时间范围查询 Sql代码 /* 日期时间范围查询 */ ---------- 创建日期时间测试表-------------------------------------------- ...
- UIWebView通过JS语句获取网页(html)的某些数值
//To get string from the title of the HTML page: NSString *currentURL = [theWebView stringByEvaluati ...
- javascript中的真假值、数据类型判断以及+的特殊用法
一.javascript中的假值 jQuery中拥有一组数量奇大的假值,包括 0,NaN(非数),''(空字符串),false,null,undefined 这些值在if判断中全部等于假,但这些值彼此 ...
- NET基础(1):类型基础
所有类型都从System.Object 派生,‘运行时’要求每个类型都从System.Object类派生,也就是说,以下两个类型定义完全一致: //隐式派生字Object class Employee ...
- Matlab中图片保存的5种方法
matlab的绘图和可视化能力是不用多说的,可以说在业内是家喻户晓的. Matlab提供了丰富的绘图函数,比如ez**系类的简易绘图函数,surf.mesh系类的数值绘图函数等几十个.另外其他专业工具 ...
- html5,新增的元素,fieldset legend
<form action=""> <fieldset> <legend>用户注册</legend> ...