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; ...
随机推荐
- Maven依赖Scope标签用法
在一个maven项目中,如果存在编译需要而发布不需要的jar包,可以用scope标签,值设为provided.如下: <dependency> <groupId ...
- sql搜索数据库中具有某列的表
在接口中明明有某个节点,但在数据库中却找不到,为此本人写了一个sql,以供快速查找. Select distinct syscolumns.name,sysobjects.name from sysc ...
- 之三:CAAnimationGroup - 动画组
动画组顾名思义就是将多个不同的动画效果组合起来同时作用于一个层上 代码演示: // 创建基本路径 CGMutablePathRef path = CGPathCreateMutable(); // 设 ...
- ubuntu 安装 swoole 和mac 安装swoole 扩展
ubuntu php 安装swoole 比较容易 1. 从git下载源码 2. 下载pcre http://sourceforge.net/projects/pcre/files/pcre/8.36/ ...
- JAVA下实现二叉树的先序、中序、后序、层序遍历(递归和循环)
import java.util.HashMap; import java.util.LinkedList; import java.util.Map; import java.util.Queue; ...
- gridView获得每行的值
前台代码: <asp:GridView ID="GridView1" runat="server" DataKeyNames="ID" ...
- iOS上架90034问题解决
开发完成的APP,我们当然要上传到AppStore里面了,这可是我们心血的结晶. 可是,就当我们兴奋之余,却发现我们的App根本无法上传到AppStore.我们百度.谷歌了N种方法,就像我这种逗逼,整 ...
- iOS定时器、延迟执行
1.通用方式(并不是实时调用并且会卡顿): // 一般用于更新一些非界面上的数据 [NSTimer scheduledTimerWithTimeInterval:时间间隔 target:self se ...
- Android 使用SoundPool播放音效
在Android开发中我们经常使用MediaPlayer来播放音频文件,但是MediaPlayer存在一些不足,例如:资源占用量较高.延迟时间较长.不支持多个音频同时播放等.这些缺点决定了MediaP ...
- UI入门指引
1. iOS学习路线: C语言:数据类型.流程控制.函数.指针.字符串.结构体.枚举.预处理: OC:面向对象.内存管理.分类.协议.Block.KVC/KVO.Foundation框架: iOS基础 ...