开源.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

[csharp] view plaincopyprint?

  1. private const string ftpServerIP = "xx.xx.xx.xx";
  2. private const string ftpRemotePath = "web";
  3. private const string ftpUserID = "user";
  4. private const string ftpPassword = "123";
  5. private void btnCreateAndUpload_Click(object sender, EventArgs e)
  6. {
  7. using (var conn = new FTPConnection
  8. {
  9. ServerAddress = ftpServerIP,
  10. ServerDirectory = ftpRemotePath,
  11. UserName = ftpUserID,
  12. Password = ftpPassword,
  13. CommandEncoding = Encoding.GetEncoding("GBK")
  14. })
  15. {
  16. conn.Connect();
  17. //创建目录L11
  18. conn.CreateDirectory("L11");
  19. //============切换当前工作目录到L11============
  20. conn.ChangeWorkingDirectory("L11");
  21. //上行代码也可以用conn.ServerDirectory = "L11";
  22. //上传"文档.txt"
  23. conn.UploadFile("文档.txt", "文档.txt");
  24. //创建子目录L21,L22
  25. conn.CreateDirectory("L21");
  26. conn.CreateDirectory("L22");
  27. //在当前工作目录L11上传文件"L11.htm"
  28. conn.UploadFile("11.htm", "11.htm");
  29. //============切换当前工作目录到L21============
  30. conn.ChangeWorkingDirectory("L21");
  31. //上传文件21.htm
  32. conn.UploadFile("21.htm", "21.htm");
  33. //创建目录L31
  34. conn.CreateDirectory("L31");
  35. //============切换当前工作目录到L31============
  36. conn.ChangeWorkingDirectory("L31");
  37. //上传文件31.htm
  38. conn.UploadFile("31.htm", "31.htm");
  39. }
  40. }

2、获取文件信息

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

[csharp] view plaincopyprint?

  1. private void btnList_Click(object sender, EventArgs e)
  2. {
  3. using (var conn = new FTPConnection
  4. {
  5. ServerAddress = ftpServerIP,
  6. ServerDirectory = ftpRemotePath,
  7. UserName = ftpUserID,
  8. Password = ftpPassword,
  9. CommandEncoding = Encoding.GetEncoding("GBK")
  10. })
  11. {
  12. conn.Connect();
  13. //获取指定目录的所有子目录和文件信息
  14. conn.ChangeWorkingDirectory("L11/L21");
  15. var files1 = conn.GetFileInfos();
  16. ShowFileInfos(files1);
  17. /*结果如下:
  18. File, /web/L11/L21/21.htm, 21.htm, 11.2KB, 2013-9-26 14:51:00
  19. Dir, /web/L11/L21/L31, L31, 0KB, 2013-9-26 14:51:00
  20. */
  21. ////返回上级目录,例子中为web/L11
  22. conn.ChangeWorkingDirectoryUp();
  23. var files2 = conn.GetFileInfosRecursive();
  24. ShowFileInfos(files2);
  25. /*结果如下:
  26. File, /web/L11/11.htm, 11.htm, 59.4KB, 2013-9-26 14:51:00
  27. Dir, /web/L11/L21, L21, 0KB, 2013-9-26 14:51:00
  28. Dir, /web/L11/L22, L22, 0KB, 2013-9-26 14:51:00
  29. File, /web/L11/文档.txt, 文档.txt, 40.8KB, 2013-9-26 14:51:00
  30. File, /web/L11/L21/21.htm, 21.htm, 11.2KB, 2013-9-26 14:51:00
  31. Dir, /web/L11/L21/L31, L31, 0KB, 2013-9-26 14:51:00
  32. File, /web/L11/L21/L31/31.htm, 31.htm, 5.6KB, 2013-9-26 14:51:00
  33. */
  34. }
  35. }
  36. void ShowFileInfos(FTPFile[] files)
  37. {
  38. foreach (var file in files)
  39. {
  40. string info = string.Format("{0}, {1}, {2}, {3}KB, {4}",
  41. file.Dir ? "Dir" : "File", file.Path, file.Name, Math.Round(file.Size / 1024.0, 1), file.LastModified);
  42. richTextBox1.AppendText(info + "\r\n");
  43. }
  44. richTextBox1.AppendText("\r\n");
  45. }

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

[csharp] view plaincopyprint?

  1. public static class FtpClientExtensions
  2. {
  3. /// <summary>
  4. /// 递归获取目录的所有子目录和文件信息
  5. /// </summary>
  6. public static FTPFile[] GetFileInfosRecursive(this FTPConnection conn)
  7. {
  8. var resultList = new List<FTPFile>();
  9. var fileInfos = conn.GetFileInfos();
  10. resultList.AddRange(fileInfos);
  11. foreach (var fileInfo in fileInfos)
  12. {
  13. if (fileInfo.Dir)
  14. {
  15. conn.ServerDirectory = fileInfo.Path;
  16. resultList.AddRange(conn.GetFileInfosRecursive());
  17. }
  18. }
  19. return resultList.ToArray();
  20. }
  21. /// <summary>
  22. /// 递归删除目录(包括所有子目录和文件信息)
  23. /// </summary>
  24. public static void DeleteDirectoryRecursive(this FTPConnection conn, string directoryName)
  25. {
  26. conn.ChangeWorkingDirectory(directoryName);
  27. var fileInfos = conn.GetFileInfos();
  28. foreach (var fileInfo in fileInfos)
  29. {
  30. if (fileInfo.Dir)
  31. conn.DeleteDirectoryRecursive(fileInfo.Name);
  32. else
  33. conn.DeleteFile(fileInfo.Name);
  34. }
  35. conn.ChangeWorkingDirectoryUp();
  36. conn.DeleteDirectory(directoryName);
  37. }
  38. }

3、删除目录及所有子目录和文件

FTPConnection.DeleteDirectory()当删除的目录不为空时,会出错,需递归删除,
递归删除目录扩展方法DeleteDirectoryRecursive见上面类FtpClientExtensions

[csharp] view plaincopyprint?

    1. private void btnDelete_Click(object sender, EventArgs e)
    2. {
    3. using (var conn = new FTPConnection
    4. {
    5. ServerAddress = ftpServerIP,
    6. ServerDirectory = ftpRemotePath,
    7. UserName = ftpUserID,
    8. Password = ftpPassword,
    9. CommandEncoding = Encoding.GetEncoding("GBK")
    10. })
    11. {
    12. conn.Connect();
    13. //递归删除目录及所有子目录和文件
    14. conn.DeleteDirectoryRecursive("L11");
    15. //如果删除单个文件,路径为当前目录的相对路径
    16. //conn.DeleteFile("L11/11.htm");
    17. }
    18. }
时间: 2024-10-25 01:31:34

开源.NET FTP组件edtFTPnet 用法的相关文章

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

在局域网中共享文件,FTP是比较方便的方案之一.Win7内部集成了FTP,只是设置起来颇费一番功夫.着文以记之. 一.安装FTP组件 由于Win7默认没有安装FTP组件.故FTP的设置第一步就是安装FTP组件 点击:控制面板—>程序和功能—>打开或关闭Windows功能.勾选“FTP服务器”及“FTP服务”“FTP扩展性”,点击“确定”,安装FTP组件.如下图所示 二.添加FTP站点 点击:控制面板—>管理工具.选中“Internet信息服务(IIS)管理器”,如图 双击“Interne

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

前言 在<化茧成蝶,开源NetWorkSocket通讯组件>发表之后,收到大家很多个star,在此感谢!更可贵的是,一些网友提出了许多好建议,经过一些时间的思考,决定将NetworkSocket从模仿MVC之后,继续模仿Owin,并局部突破,作有自己特色和理念的通讯框架.之所以模仿Owin而不是接入,是因为Open Web Interface for .NET是为Web而存在的,我需要的是应该是Open Tcp Interface for .NET,当然这是还不存在的标准,但我想达到或接近这种

开源RabbitMQ操作组件

开源RabbitMQ操作组件 对于目前大多的.NET项目,其实使用的技术栈都是差不多,估计现在很少用控件开发项目的了,毕竟一大堆问题.对.NET的项目,目前比较适合的架构ASP.NET MVC,ASP.NET WebAPI,ORM(较多Dapper.NET或者其扩展,稍大一些的项目用EF等等),为了提高速度也会采用缓存(.NET自带的Memcache,或者Redis),请求较多的项目,使用Nginx做负载均衡和使用队列等等. 上面简单的介绍一下.NET的项目的技术架构,具体的技术根据具体的需求做

推荐 11 款 React Native 开源移动 UI 组件

推荐 11 款 React Native 开源移动 UI 组件 oschina 发布于 10个月前,共有 14 条评论 本文推荐 11 个非常棒的 React Native 开源组件,希望能给移动应用开发者提供帮助. React Native 是近期 Facebook 基于 MIT 协议开源的原生移动应用开发框架,已经用于 Facebook 的生产环境.React Native 可以使用最近非常流行的 React.js 库来开发 iOS 和 Android 原生 APP. 1. iOS 表单处理

Windows 7或者 server 小技巧 添加 IIS和FTP 组件功能

Windows 7或者 server 小技巧  添加 IIS和FTP 组件功能 在万能的 控制面版 ,添加删除 组件中 . 在IE中输入  http://127.0.0.1 或者 http://localhost 打开如下图片,即表示安装成功. 在控制面版,管理工具中可以打开 IIS管理器.

Vue组件基础用法

前面的话 组件(Component)是Vue.js最强大的功能之一.组件可以扩展HTML元素,封装可重用的代码.根据项目需求,抽象出一些组件,每个组件里包含了展现.功能和样式.每个页面,根据自己所需,使用不同的组件来拼接页面.这种开发模式使前端页面易于扩展,且灵活性高,而且组件之间也实现了解耦.本文将详细介绍Vue组件基础用法 概述 组件是一个自定义元素或称为一个模块,包括所需的模板.逻辑和样式.在HTML模板中,组件以一个自定义标签的形式存在,起到占位符的功能.通过Vue.js的声明式渲染后,

关于Linux开源项目基础组件make编译流程

?? 关于Linux开源项目基础组件make编译流程 非常多Linux开源项目都会用到编译出可运行文件的make.这个是有一套流程的. 首先,GNU构建系统:https://en.wikipedia.org/wiki/GNU_build_system 使用Autotool来编译和管理整个产品的生产流程. 就是以下这张图: 这里面须要先了解make和makefile make:https://en.wikipedia.org/wiki/Make_(software) makefile:https:

开源word操作组件DocX的记录

开源word操作组件DocX的记录 使用开源word操作组件DocX的记录 1.DocX简介 1.1 简介 DocX是一个在不需要安装word的情况下对word进行操作的开源轻量级.net组件,是由爱尔兰的一个叫Cathal Coffey的博士生开发出来的.DocX使得操作word非常轻便,有利于减轻开发负担,提升程序效率.DocX在Codeplex和Github上都有开源. 1.2 获取与安装 可以在http://docx.codeplex.com/releases下载获取,也可以直接利用Nu

linux安装ftp组件

1   安装vsftpd组件 linux系统安装完后,有/etc/vsftpd/vsftpd.conf 文件,是vsftp的配置文件. [[email protected] ~]# yum -y install vsftpd 2   添加一个ftp用户 此用户就是用来登录ftp服务器用的. [[email protected] ~]# useradd ftpuser 这样一个用户建完,可以用这个登录,记得用普通登录不要用匿名了.登录后默认的路径为 /home/ftpuser. 3   给ftp用