c# FTP操作类
using
System;
using
System.Collections.Generic;
using
System.Text;
using
System.IO;
using
System.Net;
using
System.Windows.Forms;
using
System.Globalization;
namespace
FtpLib
{
public
class
FtpWeb
{
string
ftpServerIP;
string
ftpRemotePath;
string
ftpUserID;
string
ftpPassword;
string
ftpURI;
/// <summary>
/// 连接FTP
/// </summary>
/// <param name="FtpServerIP">FTP连接地址</param>
/// <param name="FtpRemotePath">指定FTP连接成功后的当前目录, 如果不指定即默认为根目录</param>
/// <param name="FtpUserID">用户名</param>
/// <param name="FtpPassword">密码</param>
public
FtpWeb(
string
FtpServerIP,
string
FtpRemotePath,
string
FtpUserID,
string
FtpPassword)
{
ftpServerIP = FtpServerIP;
ftpRemotePath = FtpRemotePath;
ftpUserID = FtpUserID;
ftpPassword = FtpPassword;
}
/// <summary>
/// 上传
/// </summary>
/// <param name="filename"></param>
public
void
Upload(
string
filename)
{
FileInfo fileInf =
new
FileInfo(filename);
string
uri = ftpURI + fileInf.Name;
FtpWebRequest reqFTP;
reqFTP = (FtpWebRequest)FtpWebRequest.Create(
new
Uri(uri));
reqFTP.Credentials =
new
NetworkCredential(ftpUserID, ftpPassword);
reqFTP.KeepAlive =
false
;
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
reqFTP.UseBinary =
true
;
reqFTP.ContentLength = fileInf.Length;
int
buffLength = 2048;
byte
[] buff =
new
byte
[buffLength];
int
contentLen;
FileStream fs = fileInf.OpenRead();
try
{
Stream strm = reqFTP.GetRequestStream();
contentLen = fs.Read(buff, 0, buffLength);
while
(contentLen != 0)
{
strm.Write(buff, 0, contentLen);
contentLen = fs.Read(buff, 0, buffLength);
}
strm.Close();
fs.Close();
}
catch
(Exception ex)
{
Insert_Standard_ErrorLog.Insert(
"FtpWeb"
,
"Upload Error --> "
+ ex.Message);
}
}
/// <summary>
/// 下载
/// </summary>
/// <param name="filePath"></param>
/// <param name="fileName"></param>
public
void
Download(
string
filePath,
string
fileName)
{
FtpWebRequest reqFTP;
try
{
FileStream outputStream =
new
FileStream(filePath +
"\\"
+ fileName, FileMode.Create);
reqFTP = (FtpWebRequest)FtpWebRequest.Create(
new
Uri(ftpURI + fileName));
reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
reqFTP.UseBinary =
true
;
reqFTP.Credentials =
new
NetworkCredential(ftpUserID, ftpPassword);
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
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);
}
ftpStream.Close();
outputStream.Close();
response.Close();
}
catch
(Exception ex)
{
Insert_Standard_ErrorLog.Insert(
"FtpWeb"
,
"Download Error --> "
+ ex.Message);
}
}
/// <summary>
/// 删除文件
/// </summary>
/// <param name="fileName"></param>
public
void
Delete(
string
fileName)
{
try
{
string
uri = ftpURI + fileName;
FtpWebRequest reqFTP;
reqFTP = (FtpWebRequest)FtpWebRequest.Create(
new
Uri(uri));
reqFTP.Credentials =
new
NetworkCredential(ftpUserID, ftpPassword);
reqFTP.KeepAlive =
false
;
reqFTP.Method = WebRequestMethods.Ftp.DeleteFile;
string
result = String.Empty;
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
long
size = response.ContentLength;
Stream datastream = response.GetResponseStream();
StreamReader sr =
new
StreamReader(datastream);
result = sr.ReadToEnd();
sr.Close();
datastream.Close();
response.Close();
}
catch
(Exception ex)
{
Insert_Standard_ErrorLog.Insert(
"FtpWeb"
,
"Delete Error --> "
+ ex.Message +
" 文件名:"
+ fileName);
}
}
/// <summary>
/// 删除文件夹
/// </summary>
/// <param name="folderName"></param>
public
void
RemoveDirectory(
string
folderName)
{
try
{
string
uri = ftpURI + folderName;
FtpWebRequest reqFTP;
reqFTP = (FtpWebRequest)FtpWebRequest.Create(
new
Uri(uri));
reqFTP.Credentials =
new
NetworkCredential(ftpUserID, ftpPassword);
reqFTP.KeepAlive =
false
;
reqFTP.Method = WebRequestMethods.Ftp.RemoveDirectory;
string
result = String.Empty;
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
long
size = response.ContentLength;
Stream datastream = response.GetResponseStream();
StreamReader sr =
new
StreamReader(datastream);
result = sr.ReadToEnd();
sr.Close();
datastream.Close();
response.Close();
}
catch
(Exception ex)
{
Insert_Standard_ErrorLog.Insert(
"FtpWeb"
,
"Delete Error --> "
+ ex.Message +
" 文件名:"
+ folderName);
}
}
/// <summary>
/// 获取当前目录下明细(包含文件和文件夹)
/// </summary>
/// <returns></returns>
public
string
[] GetFilesDetailList()
{
string
[] downloadFiles;
try
{
StringBuilder result =
new
StringBuilder();
FtpWebRequest ftp;
ftp = (FtpWebRequest)FtpWebRequest.Create(
new
Uri(ftpURI));
ftp.Credentials =
new
NetworkCredential(ftpUserID, ftpPassword);
ftp.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
WebResponse response = ftp.GetResponse();
StreamReader reader =
new
StreamReader(response.GetResponseStream(), Encoding.Default);
//while (reader.Read() > 0)
//{
//}
string
line = reader.ReadLine();
//line = reader.ReadLine();
//line = reader.ReadLine();
while
(line !=
null
)
{
result.Append(line);
result.Append(
"\n"
);
line = reader.ReadLine();
}
result.Remove(result.ToString().LastIndexOf(
"\n"
), 1);
reader.Close();
response.Close();
return
result.ToString().Split(
'\n'
);
}
catch
(Exception ex)
{
downloadFiles =
null
;
Insert_Standard_ErrorLog.Insert(
"FtpWeb"
,
"GetFilesDetailList Error --> "
+ ex.Message);
return
downloadFiles;
}
}
/// <summary>
/// 获取当前目录下文件列表(仅文件)
/// </summary>
/// <returns></returns>
public
string
[] GetFileList(
string
mask)
{
string
[] downloadFiles;
StringBuilder result =
new
StringBuilder();
FtpWebRequest reqFTP;
try
{
reqFTP = (FtpWebRequest)FtpWebRequest.Create(
new
Uri(ftpURI));
reqFTP.UseBinary =
true
;
reqFTP.Credentials =
new
NetworkCredential(ftpUserID, ftpPassword);
reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;
WebResponse response = reqFTP.GetResponse();
StreamReader reader =
new
StreamReader(response.GetResponseStream(), Encoding.Default);
string
line = reader.ReadLine();
while
(line !=
null
)
{
if
(mask.Trim() !=
string
.Empty && mask.Trim() !=
"*.*"
)
{
string
mask_ = mask.Substring(0, mask.IndexOf(
"*"
));
if
(line.Substring(0, mask_.Length) == mask_)
{
result.Append(line);
result.Append(
"\n"
);
}
}
else
{
result.Append(line);
result.Append(
"\n"
);
}
line = reader.ReadLine();
}
result.Remove(result.ToString().LastIndexOf(
'\n'
), 1);
reader.Close();
response.Close();
return
result.ToString().Split(
'\n'
);
}
catch
(Exception ex)
{
downloadFiles =
null
;
if
(ex.Message.Trim() !=
"远程服务器返回错误: (550) 文件不可用(例如,未找到文件,无法访问文件)。"
)
{
Insert_Standard_ErrorLog.Insert(
"FtpWeb"
,
"GetFileList Error --> "
+ ex.Message.ToString());
}
return
downloadFiles;
}
}
/// <summary>
/// 获取当前目录下所有的文件夹列表(仅文件夹)
/// </summary>
/// <returns></returns>
public
string
[] GetDirectoryList()
{
string
[] drectory = GetFilesDetailList();
string
m =
string
.Empty;
foreach
(
string
str
in
drectory)
{
int
dirPos = str.IndexOf(
"<DIR>"
);
if
(dirPos>0)
{
/*判断 Windows 风格*/
m += str.Substring(dirPos + 5).Trim() +
"\n"
;
}
else
if
(str.Trim().Substring(0, 1).ToUpper() ==
"D"
)
{
/*判断 Unix 风格*/
string
dir = str.Substring(54).Trim();
if
(dir !=
"."
&& dir !=
".."
)
{
m += dir +
"\n"
;
}
}
}
char
[] n =
new
char
[] {
'\n'
};
return
m.Split(n);
}
/// <summary>
/// 判断当前目录下指定的子目录是否存在
/// </summary>
/// <param name="RemoteDirectoryName">指定的目录名</param>
public
bool
DirectoryExist(
string
RemoteDirectoryName)
{
string
[] dirList = GetDirectoryList();
foreach
(
string
str
in
dirList)
{
if
(str.Trim() == RemoteDirectoryName.Trim())
{
return
true
;
}
}
return
false
;
}
/// <summary>
/// 判断当前目录下指定的文件是否存在
/// </summary>
/// <param name="RemoteFileName">远程文件名</param>
public
bool
FileExist(
string
RemoteFileName)
{
string
[] fileList = GetFileList(
"*.*"
);
foreach
(
string
str
in
fileList)
{
if
(str.Trim() == RemoteFileName.Trim())
{
return
true
;
}
}
return
false
;
}
/// <summary>
/// 创建文件夹
/// </summary>
/// <param name="dirName"></param>
public
void
MakeDir(
string
dirName)
{
FtpWebRequest reqFTP;
try
{
// dirName = name of the directory to create.
reqFTP = (FtpWebRequest)FtpWebRequest.Create(
new
Uri(ftpURI + dirName));
reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;
reqFTP.UseBinary =
true
;
reqFTP.Credentials =
new
NetworkCredential(ftpUserID, ftpPassword);
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
Stream ftpStream = response.GetResponseStream();
ftpStream.Close();
response.Close();
}
catch
(Exception ex)
{
Insert_Standard_ErrorLog.Insert(
"FtpWeb"
,
"MakeDir Error --> "
+ ex.Message);
}
}
/// <summary>
/// 获取指定文件大小
/// </summary>
/// <param name="filename"></param>
/// <returns></returns>
public
long
GetFileSize(
string
filename)
{
FtpWebRequest reqFTP;
long
fileSize = 0;
try
{
reqFTP = (FtpWebRequest)FtpWebRequest.Create(
new
Uri(ftpURI + filename));
reqFTP.Method = WebRequestMethods.Ftp.GetFileSize;
reqFTP.UseBinary =
true
;
reqFTP.Credentials =
new
NetworkCredential(ftpUserID, ftpPassword);
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
Stream ftpStream = response.GetResponseStream();
fileSize = response.ContentLength;
ftpStream.Close();
response.Close();
}
catch
(Exception ex)
{
Insert_Standard_ErrorLog.Insert(
"FtpWeb"
,
"GetFileSize Error --> "
+ ex.Message);
}
return
fileSize;
}
/// <summary>
/// 改名
/// </summary>
/// <param name="currentFilename"></param>
/// <param name="newFilename"></param>
public
void
ReName(
string
currentFilename,
string
newFilename)
{
FtpWebRequest reqFTP;
try
{
reqFTP = (FtpWebRequest)FtpWebRequest.Create(
new
Uri(ftpURI + currentFilename));
reqFTP.Method = WebRequestMethods.Ftp.Rename;
reqFTP.RenameTo = newFilename;
reqFTP.UseBinary =
true
;
reqFTP.Credentials =
new
NetworkCredential(ftpUserID, ftpPassword);
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
Stream ftpStream = response.GetResponseStream();
ftpStream.Close();
response.Close();
}
catch
(Exception ex)
{
Insert_Standard_ErrorLog.Insert(
"FtpWeb"
,
"ReName Error --> "
+ ex.Message);
}
}
/// <summary>
/// 移动文件
/// </summary>
/// <param name="currentFilename"></param>
/// <param name="newFilename"></param>
public
void
MovieFile(
string
currentFilename,
string
newDirectory)
{
ReName(currentFilename, newDirectory);
}
/// <summary>
/// 切换当前目录
/// </summary>
/// <param name="DirectoryName"></param>
/// <param name="IsRoot">true 绝对路径 false 相对路径</param>
public
void
GotoDirectory(
string
DirectoryName,
bool
IsRoot)
{
if
(IsRoot)
{
ftpRemotePath = DirectoryName;
}
else
{
ftpRemotePath += DirectoryName +
"/"
;
}
}
/// <summary>
/// 删除订单目录
/// </summary>
/// <param name="ftpServerIP">FTP 主机地址</param>
/// <param name="folderToDelete">FTP 用户名</param>
/// <param name="ftpUserID">FTP 用户名</param>
/// <param name="ftpPassword">FTP 密码</param>
public
static
void
DeleteOrderDirectory(
string
ftpServerIP,
string
folderToDelete,
string
ftpUserID,
string
ftpPassword)
{
try
{
if
(!
string
.IsNullOrEmpty(ftpServerIP) && !
string
.IsNullOrEmpty(folderToDelete) && !
string
.IsNullOrEmpty(ftpUserID) && !
string
.IsNullOrEmpty(ftpPassword))
{
FtpWeb fw =
new
FtpWeb(ftpServerIP, folderToDelete, ftpUserID, ftpPassword);
//进入订单目录
fw.GotoDirectory(folderToDelete,
true
);
//获取规格目录
string
[] folders = fw.GetDirectoryList();
foreach
(
string
folder
in
folders)
{
if
(!
string
.IsNullOrEmpty(folder) || folder !=
""
)
{
//进入订单目录
string
subFolder = folderToDelete +
"/"
+ folder;
fw.GotoDirectory(subFolder,
true
);
//获取文件列表
string
[] files = fw.GetFileList(
"*.*"
);
if
(files !=
null
)
{
//删除文件
foreach
(
string
file
in
files)
{
fw.Delete(file);
}
}
//删除冲印规格文件夹
fw.GotoDirectory(folderToDelete,
true
);
fw.RemoveDirectory(folder);
}
}
//删除订单文件夹
string
parentFolder = folderToDelete.Remove(folderToDelete.LastIndexOf(
'/'
));
string
orderFolder = folderToDelete.Substring(folderToDelete.LastIndexOf(
'/'
) + 1);
fw.GotoDirectory(parentFolder,
true
);
fw.RemoveDirectory(orderFolder);
}
else
{
throw
new
Exception(
"FTP 及路径不能为空!"
);
}
}
catch
(Exception ex)
{
throw
new
Exception(
"删除订单时发生错误,错误信息为:"
+ ex.Message);
}
}
}
public
class
Insert_Standard_ErrorLog
{
public
static
void
Insert(
string
x,
string
y)
{
}
}
}
c# FTP操作类的更多相关文章
- PHP FTP操作类( 上传、拷贝、移动、删除文件/创建目录 )
/** * 作用:FTP操作类( 拷贝.移动.删除文件/创建目录 ) * 时间:2006/5/9 * 作者:欣然随风 * QQ:276624915 */ class class_ftp { publi ...
- C# FTP操作类的代码
如下代码是关于C# FTP操作类的代码.using System;using System.Collections.Generic;using System.Text;using System.Net ...
- php的FTP操作类
class_ftp.php <?php /** * 作用:FTP操作类( 拷贝.移动.删除文件/创建目录 ) */ class class_ftp { public $off; // 返回操作状 ...
- FTP操作类
using System; using System.Collections.Generic; using System.Net; using System.IO; namespace HGFTP { ...
- 很实用的FTP操作类
using System; using System.Net; using System.Net.Sockets; using System.Text; using System.IO; using ...
- FTP操作类的使用
FTP(文件传输协议) FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”.用于Internet上的控制文件的双向传输.同时,它也是一个应用程序 ...
- (转)FTP操作类,从FTP下载文件
using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Net ...
- FTP操作类(支持异步)
public delegate void DownloadProgressChangedEventHandle(string information, long currentprogress, lo ...
- c#FTP操作类,包含上传,下载,删除,获取FTP文件列表文件夹等Hhelp类
有些时间没发表文章了,之前用到过,这是我总结出来关于ftp相关操作一些方法,网上也有很多,但是没有那么全面,我的这些仅供参考和借鉴,希望能够帮助到大家,代码和相关引用我都复制粘贴出来了,希望大家喜欢 ...
- [转]C# FTP操作类
转自 http://www.cnblogs.com/Liyuting/p/7084718.html using System; using System.Collections.Generic; ...
随机推荐
- html的head里出现了 http://c.cnzz.com/core.php
网站里出现了一段代码, 有点强迫症的我就受不了了: <html lang="en"> <head> <title>登录</title> ...
- Android QQ群:343816731 欢迎大家加入探讨
Android QQ群:343816731 欢迎大家加入探讨.
- Node.js的UnitTest单元测试
body{ font: 16px/1.5em 微软雅黑,arial,verdana,helvetica,sans-serif; } 在专业化的软件开发过程中,无论什么平台语言,现在都需要UnitTes ...
- 附7 turbine
一.作用 聚集同一个微服务的相同的commandKey.Threadpool.commandGroupKey数据进行聚合 二.配置 1.集群(cluster)(turbine聚集数据的粒度) turb ...
- 如何实现桌面App图标可以动态显示消息数(类似手机上的QQ图标)?
手机上的APP , 像QQ和微信等都可以在图标上动态显示消息数(最大99) , 那么你有没有想过这些效果是如何实现的?桌面上开发的传统应用程序能否也实现类似的功能? 1 思路 桌面快捷方式的图标本质上 ...
- [js开源组件开发]loading加载效果
loading加载效果 由于程序和网络的原因,常常我们需要在交互的时候,给用户一个正在加载中的动画,于是,loading组件横空出世.不需要复杂的代码,也能完成大多数业务,这就是我做组件的原则. 效果 ...
- jQuery总体架构
第一章 总体架构 1.设计理念 jQuery的理念就是“写更少的代码,做更多的事”,而且做到代码的高度兼容性. 2.总体架构 大致可以分为三个部分:构造模块,底层支持模块和功能模块. 3.使用自调用 ...
- 如何实现SP文档库类似百度文档库的效果 (副标题:如何在SP2013文档库的SWF文件用FlexPager显示)
1. 编辑文档库列表显示页面,如下图: 2. 添加内容编辑器,如下图: 3. 添加如下在[内容编辑器中]-[编辑源],添加如下JS代码,如下图: 代码如下: <scrip type=&quo ...
- iOS里常见的几种信息编码、加密方法简单总结
一.MD5 MD5编码是最常用的编码方法之一,是从一段字符串中通过相应特征生成一段32位的数字字母混合码. MD5主要特点是 不可逆,相同数据的MD5值肯定一样,不同数据的MD5值不一样(也不是绝对的 ...
- swift 2.2 语法 (中)
前言: 1.此文中的语法会根据Swift的升级变动而更新. 2.如果需要请移步 -> swift2.2 语法(上).swift 2.2语法(下) 函数 和C语言一样,swift也有函数,性质和我 ...