.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 ...
- JAVA 中不错的开源FTP组件:commons-net
第一步:引入jar到pom.xml. <!-- https://mvnrepository.com/artifact/commons-net/commons-net --> <dep ...
- Win7下的内置FTP组件的设置详解
在局域网中共享文件,FTP是比较方便的方案之一.Win7内部集成了FTP,只是设置起来颇费一番功夫.着文以记之. 一.安装FTP组件 由于Win7默认没有安装FTP组件.故FTP的设置第一步就是安装F ...
- 不错的开源FTP类库
socket开源ftp类库代码:http://netftp.codeplex.com/ 需要注意事项,如果以下代码出现乱码问题,可以设置其中的Encoding属性就可以. 用法示例: using Sy ...
- Net Core开源通讯组件 SmartRoute
Net Core开源通讯组件 SmartRoute(服务即集群) SmartRoute是基于Dotnet Core设计的可运行在linux和windows下的服务通讯组件,其设计理念是去中心化和零配置 ...
- 开源通讯组件ec
跨平台开源通讯组件elastic communication elastic communication是基于c#开发支持.net和mono的通讯组件(简称EC),EC的主要目的简化mono和.net ...
- .NET开源Protobuf-net组件修炼手册
一.前言 Protocol Buffer(简称Protobuf或PB) 是一个跨平台的消息交互协议,类似xml.json等 :别只会用Json和XML了,快来看看Google出品的Protocol B ...
- .NET开源Protobuf-net组件葵花手册
一.前言 我们都知道 protobuf是由Google开发的一款与平台无关,语言无关,可扩展的序列化结构数据格式,可用做数据存储格式, 通信协议 ! 在前面<.NET开源Protobuf-net ...
- centos7安装 ftp 组件与开放防火墙端口命令
Linux 安装 ftp 组件 安装完后,有/etc/vsftpd/vsftpd.conf 文件,是 vsftp 的配置文件. 1.执行 yum -y install vsftpd 2. 添加一个 f ...
随机推荐
- vue 01 练习
1.有 红.黄.蓝 三个按钮,以及一个200x200矩形框box,点击不同的按钮,box的颜色会被切换为指定的颜色 <!DOCTYPE html> <html lang=" ...
- PHP实现省市区关键词搜索邮编
前两天做了一个项目, 其中有一个需求是根据用户输入的关键词查询邮编. 最开始设计的数据库结构是省市区分为三个字段, province, city, area, 但是在写代码实现的过程中发现, 用户只输 ...
- SuperSocket实例
下载地址:https://files.cnblogs.com/files/xixixing/ConsoleApp.zip 创建控制台应用程序:ConsoleApp MySession.cs using ...
- WebUI自动化之Java语言提高
单独写一个函数和把函数写在类中的区别: 单独写一个函数,函数只能完成一个功能,团队开发.让第三方使用时比较麻烦: 项目管理和构建自动化工具Maven:
- bbs--点赞
bbs---点赞 需求分析 页面展示 1 点赞 和 踩灭 按钮展示 1 用户未登录,不处理点赞踩灭,给用户提供登录接口 2 登录 1 第一次点点赞/踩灭 1 点赞成功 数据+1 提示点赞成功 ...
- python 二维数组 转 矩阵
x = numpy.array([[,,],[,,],[,,]]) print x print x.shape 输出 [[ ] [ ] [ ]] (3L, 3L) [Finished .2s]
- [python]@cached_property缓存装饰器
cached_property缓存装饰器 class cached_property(object): """ Decorator that converts a met ...
- Java并发之ThreadPoolExecutor
ThreadPoolExecutor源码分析 简介 java.uitl.concurrent.ThreadPoolExecutor类是线程池中最核心的一个类,因此如果要透彻地了解Java中的线程池,必 ...
- 前端工程师需要掌握的 Babel 知识
在前端圈子里,对于 Babel,大家肯定都比较熟悉了.如果哪天少了它,对于前端工程师来说肯定是个噩梦.Babel 的工作原理是怎样的可能了解的人就不太多了.本文将主要介绍 Babel 的工作原理以及怎 ...
- ImportError: DLL load failed: 找不到指定的模块
如果遇到错误:ImportError: DLL load failed: 找不到指定的模块出现错误原因:安装包的来源问题,也可以理解为包版本兼容问题,有的包使用官方出版,有的包使用whl文件安装 解决 ...