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; ...
随机推荐
- Scala确实是门好语言
看完了一本Scala的书,整体感觉很不错,语法很简洁,对用惯了脚本语言的人来说语言特性稍微有点复杂,不过对Java用户应该没有压力. 最牛叉的有两点:并发.面向领域编程
- VS2010下安装Cocos2dx完整教程(原)
一.本人所使用的Cocos2dx版本(cocos2d-2.1rc0-x-2.1.3),下载地址:http://code.google.com/p/cocos2d-x/downloads/list 当前 ...
- 「轉」Java的内存机制
0.参考资料: http://www.j2megame.org/index.php/content/view/2246/125.html 1.Java的内存机制 Java 把内存划分成两种:一种是栈内 ...
- Java的自动递增和递减
和C 类似,Java 提供了丰富的快捷运算方式.这些快捷运算可使代码更清爽,更易录入,也更易读者辨读.两种很不错的快捷运算方式是递增和递减运算符(常称作"自动递增"和"自 ...
- gcc shared object
介绍一个生成动态链接库*.so的例子: 首先新建1个头文件test.h: #include <stdio.h> void first(); void second(); void thir ...
- Spring MVC处理异常的4种方式
http://blog.csdn.net/ufo2910628/article/details/40399539 http://my.oschina.net/CandyDesire/blog/3333 ...
- Android ant自动打包脚本:自动替换友盟渠道、版本号、包名
本文最后修改时间:2014-3-10 Android项目开发时,给公司人员安装,频繁升级,版本号总需要改,太麻烦,跟着时间变,自动升级才方便. Android项目开发新版时,手机上可能要装两个版本,一 ...
- jQuery Layer mobile 弹出层
layer mobile是为移动设备(手机.平板等webkit内核浏览器/webview)量身定做的弹层支撑,采用Native JavaScript编写,完全独立于PC版的layer,您需要按照场景选 ...
- CSS3简单动画
css3的动画确实非常绚丽!浏览器兼容性很重要!. 分享两个小动画 <!doctype html> <html lang="en"> <head> ...
- angular源码分析:angular中jqLite的实现——你可以丢掉jQuery了
一.从function JQLite(element)函数开始. function JQLite(element) { if (element instanceof JQLite) { //情况1 r ...