public class FtpManager
{
/// <summary>
/// 主机名
/// </summary>
string ftpServerIP;
/// <summary>
/// 登录名
/// </summary>
string ftpUserID;
/// <summary>
/// 登录密码
/// </summary>
string ftpPassword; FtpWebRequest ftpRequest; public FtpManager(string ftpServerIP, string ftpUserID, string ftpPassword)
{
this.ftpServerIP = ftpServerIP; this.ftpUserID = ftpUserID; this.ftpPassword = ftpPassword;
} #region 连接ftp
/// <summary>
/// 连接ftp
/// </summary>
/// <param name="path"></param>
public void Connect(String path)
{ // 根据uri创建FtpWebRequest对象
ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "//" + path));
//设置文件传输类型
ftpRequest.UseBinary = true;
//设置登录FTP帐号和密码
ftpRequest.Credentials = new NetworkCredential(ftpUserID, ftpPassword); }
#endregion #region FTP获取文件列表 /// <summary>
/// FTP获取文件列表
/// </summary>
/// <param name="ftpServerIP"></param>
/// <param name="ftpUserID"></param>
/// <param name="ftpPassword"></param>
/// <returns></returns>
public string[] FTPGetFileList(string filePath)
{
//响应结果
StringBuilder result = new StringBuilder(); //FTP响应
WebResponse ftpResponse = null; //FTP响应流
StreamReader ftpResponsStream = null; try
{
Connect(filePath); ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory;
//生成FTP响应
ftpResponse = ftpRequest.GetResponse(); //FTP响应流
ftpResponsStream = new StreamReader(ftpResponse.GetResponseStream()); string line = ftpResponsStream.ReadLine(); while (line != null)
{
result.Append(line);
result.Append("\n");
line = ftpResponsStream.ReadLine();
} //去掉结果列表中最后一个换行
result.Remove(result.ToString().LastIndexOf('\n'), ); //返回结果
return result.ToString().Split('\n');
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return (null);
}
finally
{
if (ftpResponsStream != null)
{
ftpResponsStream.Close();
} if (ftpResponse != null)
{
ftpResponse.Close();
}
}
} #endregion #region FTP下载文件 /// <summary>
/// FTP下载文件
/// </summary>
/// <param name="ftpServerIP">FTP服务器IP</param>
/// <param name="ftpUserID">FTP登录帐号</param>
/// <param name="ftpPassword">FTP登录密码</param>
/// <param name="saveFilePath">保存文件路径</param>
/// <param name="saveFileName">保存文件名</param>
/// <param name="downloadFileName">下载文件名</param>
public void FTPDownloadFile(string path, string saveFileName, string downloadFileName)
{
//定义FTP响应对象
FtpWebResponse ftpResponse = null;
//存储流
FileStream saveStream = null;
//FTP数据流
Stream ftpStream = null; try
{
Connect(downloadFileName);
//生成下载文件
saveStream = new FileStream(path + "\\" + saveFileName, FileMode.Create); //设置下载文件方法
ftpRequest.Method = WebRequestMethods.Ftp.DownloadFile; //生成FTP响应对象
ftpResponse = (FtpWebResponse)ftpRequest.GetResponse(); //获取FTP响应流对象
ftpStream = ftpResponse.GetResponseStream(); //响应数据长度
long cl = ftpResponse.ContentLength; int bufferSize = ; int readCount; byte[] buffer = new byte[bufferSize]; //接收FTP文件流
readCount = ftpStream.Read(buffer, , bufferSize); while (readCount > )
{
saveStream.Write(buffer, , readCount); readCount = ftpStream.Read(buffer, , bufferSize);
} }
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
if (ftpStream != null)
{
ftpStream.Close();
} if (saveStream != null)
{
saveStream.Close();
} if (ftpResponse != null)
{
ftpResponse.Close();
}
}
} #endregion #region 从ftp服务器上获得文件列表
/// <summary>
/// 从ftp服务器上获得文件列表
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
public string[] GetFileList(string path)
{
return FTPGetFileList(path);
}
#endregion #region 文件存在检查
/// <summary>
/// 文件存在检查
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
public bool fileCheckExist(string fileName)
{
bool success = false;
FtpWebResponse response = null;
StreamReader reader = null;
try
{
Connect(fileName);
response = (FtpWebResponse)ftpRequest.GetResponse();
reader = new StreamReader(response.GetResponseStream());
string line = reader.ReadLine();
if (line != null)
{
success = true;
}
}
catch (Exception)
{
success = false;
}
finally
{
if (reader != null)
{
reader.Close();
} if (response != null)
{
response.Close();
}
}
return success;
}
#endregion #region 获取文件大小
/// <summary>
/// 获取文件大小
/// </summary>
/// <param name="filename"></param>
/// <returns></returns>
public long GetFileSize(string filepath)
{
long fileSize = ; try
{
Connect(filepath);//连接 ftpRequest.Method = WebRequestMethods.Ftp.GetFileSize; FtpWebResponse response = (FtpWebResponse)ftpRequest.GetResponse(); fileSize = response.ContentLength; response.Close();
} catch (Exception ex)
{
throw ex;
} return fileSize; }
#endregion
}

调用方法:

FtpManager client = new FtpManager("192.168.1.101", "wangjun01", "qwer1234");
string parentUrl = "B";
client.FTPDownloadFile("D:", fileList[i], parentUrl);
//string[] fileList = client.FTPGetFileList(parentUrl);
//for (int i = 0; i < fileList.Length; i++)
//{
// client.FTPDownloadFile("D:", fileList[i], parentUrl);
//}

FtpManager类的更多相关文章

  1. Java类的继承与多态特性-入门笔记

    相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...

  2. C++ 可配置的类工厂

    项目中常用到工厂模式,工厂模式可以把创建对象的具体细节封装到Create函数中,减少重复代码,增强可读和可维护性.传统的工厂实现如下: class Widget { public: virtual i ...

  3. Android请求网络共通类——Hi_博客 Android App 开发笔记

    今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...

  4. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  5. ASP.NET Core 折腾笔记二:自己写个完整的Cache缓存类来支持.NET Core

    背景: 1:.NET Core 已经没System.Web,也木有了HttpRuntime.Cache,因此,该空间下Cache也木有了. 2:.NET Core 有新的Memory Cache提供, ...

  6. .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类

    .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除 ...

  7. Java基础Map接口+Collections工具类

    1.Map中我们主要讲两个接口 HashMap  与   LinkedHashMap (1)其中LinkedHashMap是有序的  怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...

  8. PHP-解析验证码类--学习笔记

    1.开始 在 网上看到使用PHP写的ValidateCode生成验证码码类,感觉不错,特拿来分析学习一下. 2.类图 3.验证码类部分代码 3.1  定义变量 //随机因子 private $char ...

  9. C# 多种方式发送邮件(附帮助类)

    因项目业务需要,需要做一个发送邮件功能,查了下资料,整了整,汇总如下,亲测可用- QQ邮箱发送邮件 #region 发送邮箱 try { MailMessage mail = new MailMess ...

随机推荐

  1. Linux 用户信息,组信息,密码信息!

    1: 用户信息保存在  /etc/passwd 文件下 2: 密码信息保存在 /etc/shadow 3: 组相关的信息 /etc/group

  2. Highlight On Mouseover Effect With JQuery

    How to get the xpath by clicking an html element How to get the xpath by clicking an html element Qu ...

  3. 注册UBER(优步)司机常见问题,如何注册uber(优步)司机

    如何注册uber(优步)司机,怎么注册UBER(优步)司机 此链接为优步内部人员推荐,优先审核,基本当天就能收到短信,注意上传证件照清晰点. https://uber.avosapps.com/ref ...

  4. Android布局_LinearLayout布局

    一.LinearLayout 布局,类似于一个盒子 1. 主要属性有: (1)android:orientation 设置LinearLayout容器布局组件的方式:要么按行要么按列.只能取值:hor ...

  5. WCF 双工通信

    注释:本学习是参考Artech大神的资料: 在WCF 实现双工通信 在这里我就不介绍双工通信的概念了,我写博客的目的是检测自己掌握情况,看我wcf通信后,觉得纸上得来终觉浅,绝知此事要躬行. 我使用的 ...

  6. JavaScript的深度克隆

    1.JavaScript的五种基本数据类型: Number.String.Boolean.null.undefined. 2.typeof返回的六种数据类型: Number.String.Boolea ...

  7. PHP中类的继承关系

    在PHP中,我时常会写一个类,类写了一个共用方法,然后让子类去继承就能得到相应的功能.假设大致有这么一个父类: 1 <?php 2 class Father{ 3 4 public functi ...

  8. thinkphp phpexcel导入

    上次做了一个基于tp3.2.3的phpexcel导出,这次是phpexcel导入,准备材料phpexcel(不知道下载地址的查看我上一篇博文),虽说是基于thinkphp3.2.3来的,也只不过是引入 ...

  9. 编写带参数decorator

    无参的@log装饰器: def log(f): def fn(x): print 'call ' + f.__name__ + '()...' return f(x) return fn 发现对于被装 ...

  10. [转]IOS 学习笔记(8) 滚动视图(UIScrollView)的使用方法

    下面介绍pageControl结合ScrollView实现连续滑动翻页的效果,ScrollView我们在应用开发中经常用到,以g这种翻页效果还是很好看的,如下图所示: 通过这个例子,我们重点学习UIS ...