using System;
using System.IO;
using System.Net;
using System.Text; namespace Whir.Software.DataSyncTools.Library.Helper
{
/// <summary>
/// Ftp辅助类
/// </summary>
public class FtpHelper
{
private const int BufferSize = 2048;
private readonly string _host;
private readonly string _pass;
private readonly string _user;
private FtpWebRequest _ftpRequest;
private FtpWebResponse _ftpResponse;
private Stream _ftpStream; public FtpHelper(string hostIp, string userName, string password)
{
_host = hostIp;
_user = userName;
_pass = password;
} /// <summary>
/// 下载文件
/// </summary>
/// <param name="localFile"></param>
/// <param name="remoteFile"></param>
/// <returns></returns>
public FtpResult Download(string localFile, string remoteFile)
{
FtpResult result;
try
{
_ftpRequest = (FtpWebRequest)WebRequest.Create(_host + "/" + remoteFile);
_ftpRequest.Credentials = new NetworkCredential(_user, _pass);
_ftpRequest.UseBinary = true;
_ftpRequest.UsePassive = true;
_ftpRequest.KeepAlive = true;
_ftpRequest.Method = WebRequestMethods.Ftp.DownloadFile;
_ftpResponse = (FtpWebResponse)_ftpRequest.GetResponse();
_ftpStream = _ftpResponse.GetResponseStream();
var localFileStream = new FileStream(localFile, FileMode.Create);
var byteBuffer = new byte[BufferSize];
if (_ftpStream != null)
{
int bytesRead = _ftpStream.Read(byteBuffer, 0, BufferSize);
try
{
while (bytesRead > 0)
{
localFileStream.Write(byteBuffer, 0, bytesRead);
bytesRead = _ftpStream.Read(byteBuffer, 0, BufferSize);
}
}
catch (Exception ex)
{
result = new FtpResult(false, ex.Message);
return result;
}
}
localFileStream.Close();
if (_ftpStream != null) _ftpStream.Close();
_ftpResponse.Close();
_ftpRequest = null;
result = new FtpResult(true, "ok");
}
catch (Exception ex)
{
result = new FtpResult(false, ex.Message);
}
return result;
} /// <summary>
/// 上传文件
/// </summary>
/// <param name="localFile"></param>
/// <param name="remoteFile"></param>
/// <returns></returns>
public FtpResult Upload(string localFile, string remoteFile)
{
FtpResult result;
try
{
_ftpRequest = (FtpWebRequest)WebRequest.Create(_host + "/" + remoteFile);
_ftpRequest.Credentials = new NetworkCredential(_user, _pass);
_ftpRequest.UseBinary = true;
_ftpRequest.UsePassive = true;
_ftpRequest.KeepAlive = true;
_ftpRequest.Method = WebRequestMethods.Ftp.UploadFile;
_ftpStream = _ftpRequest.GetRequestStream();
var localFileStream = new FileStream(localFile, FileMode.Create);
var byteBuffer = new byte[BufferSize];
int bytesSent = localFileStream.Read(byteBuffer, 0, BufferSize);
try
{
while (bytesSent != 0)
{
_ftpStream.Write(byteBuffer, 0, bytesSent);
bytesSent = localFileStream.Read(byteBuffer, 0, BufferSize);
}
}
catch (Exception ex)
{
result = new FtpResult(false, ex.Message);
return result;
}
localFileStream.Close();
_ftpStream.Close();
_ftpRequest = null;
result = new FtpResult(true, "ok");
}
catch (Exception ex)
{
result = new FtpResult(false, ex.Message);
}
return result;
} /// <summary>
/// 删除文件
/// </summary>
/// <param name="deleteFile"></param>
public FtpResult Delete(string deleteFile)
{
FtpResult result;
try
{
_ftpRequest = (FtpWebRequest)WebRequest.Create(_host + "/" + deleteFile);
_ftpRequest.Credentials = new NetworkCredential(_user, _pass);
_ftpRequest.UseBinary = true;
_ftpRequest.UsePassive = true;
_ftpRequest.KeepAlive = true;
_ftpRequest.Method = WebRequestMethods.Ftp.DeleteFile;
_ftpResponse = (FtpWebResponse)_ftpRequest.GetResponse();
_ftpResponse.Close();
_ftpRequest = null;
result = new FtpResult(true, "ok");
}
catch (Exception ex)
{
result = new FtpResult(false, ex.Message);
}
return result;
} /// <summary>
/// 文件重命名
/// </summary>
/// <param name="currentFileNameAndPath"></param>
/// <param name="newFileName"></param>
/// <returns></returns>
public FtpResult Rename(string currentFileNameAndPath, string newFileName)
{
FtpResult result;
try
{
_ftpRequest = (FtpWebRequest)WebRequest.Create(_host + "/" + currentFileNameAndPath);
_ftpRequest.Credentials = new NetworkCredential(_user, _pass);
_ftpRequest.UseBinary = true;
_ftpRequest.UsePassive = true;
_ftpRequest.KeepAlive = true;
_ftpRequest.Method = WebRequestMethods.Ftp.Rename;
_ftpRequest.RenameTo = newFileName;
_ftpResponse = (FtpWebResponse)_ftpRequest.GetResponse();
_ftpResponse.Close();
_ftpRequest = null;
result = new FtpResult(true, "ok");
}
catch (Exception ex)
{
result = new FtpResult(false, ex.Message);
}
return result;
} /// <summary>
/// 创建目录
/// </summary>
/// <param name="newDirectory"></param>
/// <returns></returns>
public FtpResult CreateDirectory(string newDirectory)
{
FtpResult result;
try
{
_ftpRequest = (FtpWebRequest)WebRequest.Create(_host + "/" + newDirectory);
_ftpRequest.Credentials = new NetworkCredential(_user, _pass);
_ftpRequest.UseBinary = true;
_ftpRequest.UsePassive = true;
_ftpRequest.KeepAlive = true;
_ftpRequest.Method = WebRequestMethods.Ftp.MakeDirectory;
_ftpResponse = (FtpWebResponse)_ftpRequest.GetResponse();
_ftpResponse.Close();
_ftpRequest = null;
result = new FtpResult(true, "ok");
}
catch (Exception ex)
{
result = new FtpResult(false, ex.Message);
}
return result;
} /// <summary>
/// 取得文件创建时间
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
public FtpResult GetFileCreatedDateTime(string fileName)
{
FtpResult result;
try
{
_ftpRequest = (FtpWebRequest)WebRequest.Create(_host + "/" + fileName);
_ftpRequest.Credentials = new NetworkCredential(_user, _pass);
_ftpRequest.UseBinary = true;
_ftpRequest.UsePassive = true;
_ftpRequest.KeepAlive = true;
_ftpRequest.Method = WebRequestMethods.Ftp.GetDateTimestamp;
_ftpResponse = (FtpWebResponse)_ftpRequest.GetResponse();
_ftpStream = _ftpResponse.GetResponseStream();
if (_ftpStream != null)
{
var ftpReader = new StreamReader(_ftpStream);
string fileInfo;
try
{
fileInfo = ftpReader.ReadToEnd();
}
catch (Exception ex)
{
result = new FtpResult(false, ex.Message);
ftpReader.Close();
if (_ftpStream != null) _ftpStream.Close();
_ftpResponse.Close();
_ftpRequest = null;
return result;
}
ftpReader.Close();
if (_ftpStream != null) _ftpStream.Close();
_ftpResponse.Close();
_ftpRequest = null;
return new FtpResult(true, fileInfo);
}
return new FtpResult(false, "响应流为空");
}
catch (Exception ex)
{
result = new FtpResult(false, ex.Message);
}
return result;
} /// <summary>
/// 取得文件大小
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
public FtpResult GetFileSize(string fileName)
{
FtpResult result;
try
{
_ftpRequest = (FtpWebRequest)WebRequest.Create(_host + "/" + fileName);
_ftpRequest.Credentials = new NetworkCredential(_user, _pass);
_ftpRequest.UseBinary = true;
_ftpRequest.UsePassive = true;
_ftpRequest.KeepAlive = true;
_ftpRequest.Method = WebRequestMethods.Ftp.GetFileSize;
_ftpResponse = (FtpWebResponse)_ftpRequest.GetResponse();
_ftpStream = _ftpResponse.GetResponseStream();
if (_ftpStream != null)
{
var ftpReader = new StreamReader(_ftpStream);
string fileInfo = null;
try
{
while (ftpReader.Peek() != -1)
{
fileInfo = ftpReader.ReadToEnd();
}
}
catch (Exception ex)
{
result = new FtpResult(false, ex.Message);
ftpReader.Close();
if (_ftpStream != null) _ftpStream.Close();
_ftpResponse.Close();
_ftpRequest = null;
return result;
}
ftpReader.Close();
_ftpStream.Close();
_ftpResponse.Close();
_ftpRequest = null;
return new FtpResult(true, fileInfo);
}
result = new FtpResult(false, "响应流为空");
}
catch (Exception ex)
{
result = new FtpResult(false, ex.Message);
}
return result;
} /// <summary>
/// 显示远程目录结构
/// </summary>
/// <param name="directory"></param>
/// <returns></returns>
public string[] DirectoryListSimple(string directory)
{
try
{
_ftpRequest = (FtpWebRequest)WebRequest.Create(_host + "/" + directory);
_ftpRequest.Credentials = new NetworkCredential(_user, _pass);
_ftpRequest.UseBinary = true;
_ftpRequest.UsePassive = true;
_ftpRequest.KeepAlive = true;
_ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory;
_ftpResponse = (FtpWebResponse)_ftpRequest.GetResponse();
_ftpStream = _ftpResponse.GetResponseStream();
if (_ftpStream != null)
{
var ftpReader = new StreamReader(_ftpStream);
string directoryRaw = null;
try
{
while (ftpReader.Peek() != -1)
{
directoryRaw += ftpReader.ReadLine() + "|";
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
ftpReader.Close();
_ftpStream.Close();
_ftpResponse.Close();
_ftpRequest = null;
/* Return the Directory Listing as a string Array by Parsing 'directoryRaw' with the Delimiter you Append (I use | in This Example) */
try
{
if (directoryRaw != null)
{
string[] directoryList = directoryRaw.Split("|".ToCharArray());
return directoryList;
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
return new[] { "" };
} /// <summary>
/// 远程文件列表
/// </summary>
/// <param name="directory"></param>
/// <returns></returns>
public string[] DirectoryListDetailed(string directory)
{
try
{
_ftpRequest = (FtpWebRequest)WebRequest.Create(_host + "/" + directory);
_ftpRequest.Credentials = new NetworkCredential(_user, _pass);
_ftpRequest.UseBinary = true;
_ftpRequest.UsePassive = true;
_ftpRequest.KeepAlive = true;
_ftpRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
_ftpResponse = (FtpWebResponse)_ftpRequest.GetResponse();
_ftpStream = _ftpResponse.GetResponseStream();
if (_ftpStream != null)
{
var ftpReader = new StreamReader(_ftpStream);
string directoryRaw = null;
try
{
while (ftpReader.Peek() != -1)
{
directoryRaw += ftpReader.ReadLine() + "|";
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
ftpReader.Close();
_ftpStream.Close();
_ftpResponse.Close();
_ftpRequest = null;
try
{
if (directoryRaw != null)
{
string[] directoryList = directoryRaw.Split("|".ToCharArray());
return directoryList;
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
/* Return an Empty string Array if an Exception Occurs */
return new[] { "" };
}
} public class FtpResult
{
public FtpResult(bool isCusecess, string message)
{
IsSucess = isCusecess;
Message = message;
} public bool IsSucess { get; set; }
public string Message { get; set; }
}
}

FTPHelper-封装FTP的相关操作的更多相关文章

  1. cmd 下登陆ftp及相关操作

    cmd 下登陆ftp及相关操作 2011-08-09 20:34:28|  分类: 小技巧|字号 订阅 一.举例 假设FTP地址为“ 61.129.83.39”(大家试验的时候不要以这个FTP去试,应 ...

  2. day17-Python运维开发基础(类的封装 / 对象和类的相关操作、构造方法)

    1. 类的封装及相关操作 # ### oop 面向对象程序开发 """ #用几大特征表达一类事物称为一个类,类更像是一张图纸,表达的是一个抽象概念 "" ...

  3. VC++文件相关操作的函数封装实现

    在开发编译工具中,需要用到文件的相关操作,于是就封装了相关的函数实现: //判断文件是否存在 BOOL FileIsExist(CString strFileName) { CFileFind fin ...

  4. FtpHelper实现ftp服务器文件读写操作(C#)

    最近做了一个项目,需要读取ftp服务器上的文件,于是参考了网上提供的一些帮组方法,使用过程中,出现一些小细节问题,于是本人做了一些修改,拿来分享一下 using System; using Syste ...

  5. Liunx下的有关于tomcat的相关操作 && Liunx 常用指令

    先记录以下liunx下的有关于tomcat的相关操作 查看tomcat进程: ps-ef|grep java (回车) 停止tomcat进程: kill -9 PID (进程号如77447) (回车) ...

  6. Asp.Net Core 2.0 项目实战(4)ADO.NET操作数据库封装、 EF Core操作及实例

    Asp.Net Core 2.0 项目实战(1) NCMVC开源下载了 Asp.Net Core 2.0 项目实战(2)NCMVC一个基于Net Core2.0搭建的角色权限管理开发框架 Asp.Ne ...

  7. python文件相关操作

    Python文件相关操作 打开文件 打开文件,采用open方法,会将文件的句柄返回,如下: f = open('test_file.txt','r',encoding='utf-8') 在上面的代码中 ...

  8. openresty 学习笔记四:连接mysql和进行相关操作

    openresty 学习笔记四:连接mysql和进行相关操作 毕竟redis是作为缓存,供程序的快速读写,虽然reidis也可以做持久化保存,但还是需要一个做数据存储的数据库.比如首次查询数据在red ...

  9. openresty 学习笔记三:连接redis和进行相关操作

    openresty 学习笔记三:连接redis和进行相关操作 openresty 因其非阻塞的调用,令服务器拥有高性能高并发,当涉及到数据库操作时,更应该选择有高速读写速度的redis进行数据处理.避 ...

随机推荐

  1. 【资料】wod食物

    注意:1. 除非另外注明, 所有效果持续时间为整个地城2. 某几样食物若使用午饭时间技能, 效果只有LV1 (lunch level -25), 请小心服用. X技能等级 = 技能等级 焖豆属性奖励体 ...

  2. mount umont

    如果想在运行的Linux下访问其它文件系统中的资源的话,就要用mount命令来实现. 2.      mount的基本用法是?格式:mount [-参数] [设备名称] [挂载点] 其中常用的参数有: ...

  3. nsq多播分发和负载均衡实验

    什么是nsq?请参考实时分布式消息平台nsq. 本地如何搭建nsq?请参考本地搭建nsq经验分享. 从NSQ的设计文档中得知,单个nsqd被设计为一次能够处理多个流数据,NSQ中的数据流模型是由str ...

  4. 提高软件质量实践——Facebook 篇

    提高软件质量实践——Facebook 篇 Facebook 从 2004 年的哈佛校园的学生项目在短短的 7~8 年的时间中快速增长为拥有 10 亿用户的世界上最大的社交网络,又一次见证了互联网创业成 ...

  5. 容器+AOP实现动态部署(四)

    上篇咱们介绍了容器和AOP的结合,结合后怎样将对象增强服务并没有过多的说明,这里将详细说明怎样将对象 进行增强 ,达到一个一对多和多对多的增强方式 先从简单的方式说起 /** *JDK代理类,实现动态 ...

  6. python -m xxx.py和python xxx.py的区别

    先看下python -m site作用是显示sys.path的值内容,也就是python搜索模块的目录,作用类似于linux下的PATH python -m SimpleHTTPServer 会在sy ...

  7. 关于FFmpegInterop项目的编译

    如果是从git 上下载的最新版本 FFmpeg,那么打开VS2015编译时会报出一个错误    C4996    'av_free_packet': 被声明为已否决    FFmpegInterop  ...

  8. ZZY的宠物(矩阵运算+快速幂)

    E :ZZY的宠物 描述 ZZY领养了一对刚刚出生的不知名小宠物..巨萌巨可爱!!...小宠物的生命为5个单位时间并且不会在中间出意外翘辫子(如: 从0出生能活到5但活不到6)..小宠物经过2个单位时 ...

  9. 数学图形(2.13)Spherical trochoid曲线

    该曲线与上一节的herical cycloid球面外摆曲线 很相似,难道这是球面内摆曲线? #http://www.mathcurve.com/courbes3d/cycloidspheric/tro ...

  10. SWIG 快速入门

    SWIG 安装 本文使用了 SWIG 版本 2.0.4(参见 参考资料 获取下载站点的链接).要构建和安装 SWIG,可按照典型的开源安装流程,在命令提示符下输入以下命令: 请注意,为前缀提供的路径必 ...