首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
Windows程序
> 详细
c#一个FTP操作封装类FTPHelper
时间:
2016-06-20 15:43:04
阅读:
424
评论:
0
收藏:
0
[点我收藏+]
标签:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
public
class FTPHelper
{
/// <summary>
/// FTP请求对象
/// </summary>
FtpWebRequest request =
null;
/// <summary>
/// FTP响应对象
/// </summary>
FtpWebResponse response =
null;
/// <summary>
/// FTP服务器地址
/// </summary>
public
string ftpURI {
get;
private
set; }
/// <summary>
/// FTP服务器IP
/// </summary>
public
string ftpServerIP {
get;
private
set; }
/// <summary>
/// FTP服务器默认目录
/// </summary>
public
string ftpRemotePath {
get;
private
set; }
/// <summary>
/// FTP服务器登录用户名
/// </summary>
public
string ftpUserID {
get;
private
set; }
/// <summary>
/// FTP服务器登录密码
/// </summary>
public
string ftpPassword {
get;
private
set; }
/// <summary>
/// 初始化
/// </summary>
/// <param name="FtpServerIP">FTP连接地址</param>
/// <param name="FtpRemotePath">指定FTP连接成功后的当前目录, 如果不指定即默认为根目录</param>
/// <param name="FtpUserID">用户名</param>
/// <param name="FtpPassword">密码</param>
public FTPHelper(
string ftpServerIP,
string ftpRemotePath,
string ftpUserID,
string ftpPassword)
{
this.ftpServerIP = ftpServerIP;
this.ftpRemotePath = ftpRemotePath;
this.ftpUserID = ftpUserID;
this.ftpPassword = ftpPassword;
this.ftpURI =
"ftp://" + ftpServerIP +
"/" + ftpRemotePath +
"/";
}
~FTPHelper()
{
if (response !=
null)
{
response.Close();
response =
null;
}
if (request !=
null)
{
request.Abort();
request =
null;
}
}
/// <summary>
/// 建立FTP链接,返回响应对象
/// </summary>
/// <param name="uri">FTP地址</param>
/// <param name="ftpMethod">操作命令</param>
/// <returns></returns>
private FtpWebResponse Open(Uri uri,
string ftpMethod)
{
request = (FtpWebRequest)FtpWebRequest.Create(uri);
request.Method = ftpMethod;
request.UseBinary =
true;
request.KeepAlive =
false;
request.Credentials =
new NetworkCredential(
this.ftpUserID,
this.ftpPassword);
return (FtpWebResponse)request.GetResponse();
}
/// <summary>
/// 建立FTP链接,返回请求对象
/// </summary>
/// <param name="uri">FTP地址</param>
/// <param name="ftpMethod">操作命令</param>
private FtpWebRequest OpenRequest(Uri uri,
string ftpMethod)
{
request = (FtpWebRequest)WebRequest.Create(uri);
request.Method = ftpMethod;
request.UseBinary =
true;
request.KeepAlive =
false;
request.Credentials =
new NetworkCredential(
this.ftpUserID,
this.ftpPassword);
return request;
}
/// <summary>
/// 创建目录
/// </summary>
/// <param name="remoteDirectoryName">目录名</param>
public
void CreateDirectory(
string remoteDirectoryName)
{
response = Open(
new Uri(ftpURI + remoteDirectoryName), WebRequestMethods.Ftp.MakeDirectory);
}
/// <summary>
/// 更改目录或文件名
/// </summary>
/// <param name="currentName">当前名称</param>
/// <param name="newName">修改后新名称</param>
public
void ReName(
string currentName,
string newName)
{
request = OpenRequest(
new Uri(ftpURI + currentName), WebRequestMethods.Ftp.Rename);
request.RenameTo = newName;
response = (FtpWebResponse)request.GetResponse();
}
/// <summary>
/// 切换当前目录
/// </summary>
/// <param name="IsRoot">true:绝对路径 false:相对路径</param>
public
void GotoDirectory(
string DirectoryName,
bool IsRoot)
{
if (IsRoot)
ftpRemotePath = DirectoryName;
else
ftpRemotePath +=
"/" + DirectoryName;
ftpURI =
"ftp://" + ftpServerIP +
"/" + ftpRemotePath +
"/";
}
/// <summary>
/// 删除目录(包括下面所有子目录和子文件)
/// </summary>
/// <param name="remoteDirectoryName">要删除的带路径目录名:如web/test</param>
/*
* 例:删除test目录
FTPHelper helper = new FTPHelper("x.x.x.x", "web", "user", "password");
helper.RemoveDirectory("web/test");
*/
public
void RemoveDirectory(
string remoteDirectoryName)
{
GotoDirectory(remoteDirectoryName,
true);
var listAll = ListFilesAndDirectories();
foreach (var m
in listAll)
{
if (m.IsDirectory)
RemoveDirectory(m.Path);
else
DeleteFile(m.Name);
}
GotoDirectory(remoteDirectoryName,
true);
response = Open(
new Uri(ftpURI), WebRequestMethods.Ftp.RemoveDirectory);
}
/// <summary>
/// 文件上传
/// </summary>
/// <param name="localFilePath">本地文件路径</param>
public
void Upload(
string localFilePath)
{
FileInfo fileInf =
new FileInfo(localFilePath);
request = OpenRequest(
new Uri(ftpURI + fileInf.Name), WebRequestMethods.Ftp.UploadFile);
request.ContentLength = fileInf.Length;
int buffLength = 2048;
byte[] buff =
new
byte[buffLength];
int contentLen;
using (var fs = fileInf.OpenRead())
{
using (var strm = request.GetRequestStream())
{
contentLen = fs.Read(buff, 0, buffLength);
while (contentLen != 0)
{
strm.Write(buff, 0, contentLen);
contentLen = fs.Read(buff, 0, buffLength);
}
}
}
}
/// <summary>
/// 删除文件
/// </summary>
/// <param name="remoteFileName">要删除的文件名</param>
public
void DeleteFile(
string remoteFileName)
{
response = Open(
new Uri(ftpURI + remoteFileName), WebRequestMethods.Ftp.DeleteFile);
}
/// <summary>
/// 获取当前目录的文件和一级子目录信息
/// </summary>
/// <returns></returns>
public List<FileStruct> ListFilesAndDirectories()
{
var fileList =
new List<FileStruct>();
response = Open(
new Uri(ftpURI), WebRequestMethods.Ftp.ListDirectoryDetails);
using (var stream = response.GetResponseStream())
{
using (var sr =
new StreamReader(stream))
{
string line =
null;
while ((line = sr.ReadLine()) !=
null)
{
//line的格式如下:
//08-18-13 11:05PM <DIR> aspnet_client
//09-22-13 11:39PM 2946 Default.aspx
DateTime dtDate = DateTime.ParseExact(line.Substring(0, 8),
"MM-dd-yy",
null);
DateTime dtDateTime = DateTime.Parse(dtDate.ToString(
"yyyy-MM-dd") + line.Substring(8, 9));
string[] arrs = line.Split(
‘ ‘);
var model =
new FileStruct()
{
IsDirectory = line.IndexOf(
"<DIR>") > 0 ?
true :
false,
CreateTime = dtDateTime,
Name = arrs[arrs.Length - 1],
Path = ftpRemotePath +
"/" + arrs[arrs.Length - 1]
};
fileList.Add(model);
}
}
}
return fileList;
}
/// <summary>
/// 列出当前目录的所有文件
/// </summary>
public List<FileStruct> ListFiles()
{
var listAll = ListFilesAndDirectories();
var listFile = listAll.Where(m => m.IsDirectory ==
false).ToList();
return listFile;
}
/// <summary>
/// 列出当前目录的所有一级子目录
/// </summary>
public List<FileStruct> ListDirectories()
{
var listAll = ListFilesAndDirectories();
var listFile = listAll.Where(m => m.IsDirectory ==
true).ToList();
return listFile;
}
/// <summary>
/// 判断当前目录下指定的子目录或文件是否存在
/// </summary>
/// <param name="remoteName">指定的目录或文件名</param>
public
bool IsExist(
string remoteName)
{
var list = ListFilesAndDirectories();
if (list.Count(m => m.Name == remoteName) > 0)
return
true;
return
false;
}
/// <summary>
/// 判断当前目录下指定的一级子目录是否存在
/// </summary>
/// <param name="RemoteDirectoryName">指定的目录名</param>
public
bool IsDirectoryExist(
string remoteDirectoryName)
{
var listDir = ListDirectories();
if (listDir.Count(m => m.Name == remoteDirectoryName) > 0)
return
true;
return
false;
}
/// <summary>
/// 判断当前目录下指定的子文件是否存在
/// </summary>
/// <param name="RemoteFileName">远程文件名</param>
public
bool IsFileExist(
string remoteFileName)
{
var listFile = ListFiles();
if (listFile.Count(m => m.Name == remoteFileName) > 0)
return
true;
return
false;
}
/// <summary>
/// 下载
/// </summary>
/// <param name="saveFilePath">下载后的保存路径</param>
/// <param name="downloadFileName">要下载的文件名</param>
public
void Download(
string saveFilePath,
string downloadFileName)
{
using (FileStream outputStream =
new FileStream(saveFilePath +
"\\" + downloadFileName, FileMode.Create))
{
response = Open(
new Uri(ftpURI + downloadFileName), WebRequestMethods.Ftp.DownloadFile);
using (Stream ftpStream = response.GetResponseStream())
{
long cl = response.ContentLength;
int bufferSize = 2048;
int readCount;
byte[] buffer =
new
byte[bufferSize];
readCount = ftpStream.Read(buffer, 0, bufferSize);
while (readCount > 0)
{
outputStream.Write(buffer, 0, readCount);
readCount = ftpStream.Read(buffer, 0, bufferSize);
}
}
}
}
}
public
class FileStruct
{
/// <summary>
/// 是否为目录
/// </summary>
public
bool IsDirectory {
get;
set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateTime {
get;
set; }
/// <summary>
/// 文件或目录名称
/// </summary>
public
string Name {
get;
set; }
/// <summary>
/// 路径
/// </summary>
public
string Path {
get;
set; }
}
c#一个FTP操作封装类FTPHelper
标签:
原文地址:http://www.cnblogs.com/lvdongjie/p/5600591.html
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
动态 WebApi 引擎使用教程(3行代码完成动态 WebApi 构建)
2021-07-28
windows 查看文件的md5/sha1/sha256
2021-07-28
git windows下换行符问题 LF与CRLF转换
2021-07-27
FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。
2021-07-26
K8S--可视化界面Kubernetes Dashboard(API Server方式)
2021-07-26
Redis安装成windows服务
2021-07-26
c#32位支持大内存(>2gb)
2021-07-23
【c#】Dev BarStaticItem问题汇总
2021-07-23
Exception: URL fetch failure on https://s3.amazonaws.com/text-datasets/nietzsche.txt: None -- [WinError 10054] 远程主机强迫关闭了一个现有的连接。
2021-07-22
WinForm使用DataGridView实现类似Excel表格的查找替换
2021-07-22
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!