zoukankan
html css js c++ java
FTP协议操作
FTP协议操作代码
采用MS的FTP协议封装
using
System;
using
System.Collections.Generic;
using
System.Text;
using
System.Net;
using
System.IO;
using
System.DirectoryServices.Protocols;
namespace
Vancl.FileUtility
{
public
class
FtpCmd
{
创建文件夹
#region
创建文件夹
/**/
///
<summary>
///
创建文件夹:不实现级联创建
///
返回:true成功,false失败
///
</summary>
///
<param name="BaseUriStr">
基Uri字符串:如ftp://192.168.1.190:21
</param>
///
<param name="AimUriStr">
目标目录名,相对路径:如/FTF
</param>
///
<param name="UserName">
用户名
</param>
///
<param name="UserPwd">
用户密码
</param>
///
<returns></returns>
public
static
bool
CreateFtpDirectory(
string
BaseUriStr,
string
AimUriStr,
string
UserName,
string
UserPwd)
{
Uri BaseUri
=
new
Uri(BaseUriStr);
Uri AimUri
=
new
Uri(BaseUri, AimUriStr);
FtpWebRequest FtpRequest
=
(FtpWebRequest)WebRequest.Create(AimUri);
FtpRequest.KeepAlive
=
true
;
FtpRequest.Timeout
=
2000
;
FtpRequest.UsePassive
=
false
;
NetworkCredential FtpCred
=
new
NetworkCredential(UserName, UserPwd);
CredentialCache FtpCache
=
new
CredentialCache();
FtpCache.Add(AimUri, AuthType.Basic.ToString(), FtpCred);
FtpRequest.Credentials
=
FtpCache;
FtpRequest.Method
=
WebRequestMethods.Ftp.MakeDirectory;
try
{
FtpWebResponse FtpResponse
=
(FtpWebResponse)FtpRequest.GetResponse();
if
(FtpResponse.StatusCode
==
FtpStatusCode.PathnameCreated)
{
FtpResponse.Close();
return
true
;
}
else
{
FtpResponse.Close();
return
false
;
}
}
catch
(WebException e)
{
FtpWebResponse FtpResponse
=
(FtpWebResponse)e.Response;
if
(FtpResponse.StatusCode
==
FtpStatusCode.ActionNotTakenFileUnavailable)
{
//
文件已存在,返回True
FtpResponse.Close();
return
true
;
}
else
{
FtpResponse.Close();
return
false
;
}
}
}
/**/
///
<summary>
///
创建文件夹:实现级联创建
///
返回:true成功,false失败
///
</summary>
///
<param name="BaseUriStr">
基Uri字符串:如ftp://192.168.1.190:21
</param>
///
<param name="AimUriStr">
目标目录名,相对路径:如/FTF/FTF1/FTF2/FTF3
</param>
///
<param name="UserName">
用户名
</param>
///
<param name="UserPwd">
用户密码
</param>
///
<returns></returns>
public
static
bool
CreateFtpListDirectory(
string
BaseUriStr,
string
AimUriStr,
string
UserName,
string
UserPwd)
{
string
[] AimUriArray
=
AimUriStr.TrimStart(
'
/
'
).Split(
'
/
'
);
string
AimUriCache
=
string
.Empty;
for
(
int
i
=
0
; i
<
AimUriArray.Length; i
++
)
{
AimUriCache
+=
"
/
"
+
AimUriArray[i];
if
(CreateFtpDirectory(BaseUriStr, AimUriCache, UserName, UserPwd))
{
continue
;
}
else
{
if
(CreateFtpDirectory(BaseUriStr, AimUriCache, UserName, UserPwd))
{
continue
;
}
else
{
return
false
;
}
}
}
return
true
;
}
#endregion
删除文件夹
#region
删除文件夹
/**/
///
<summary>
///
删除文件夹,不实现级联删除
///
返回:true成功,false失败
///
</summary>
///
<param name="BaseUriStr">
基Uri字符串:如ftp://192.168.1.190:21
</param>
///
<param name="AimUriStr">
目标目录,相对路径:如/FTF/FTFDEL
</param>
///
<param name="UserName">
用户名
</param>
///
<param name="UserPwd">
用户密码
</param>
///
<returns></returns>
public
static
bool
DeleteFtpDirectory(
string
BaseUriStr,
string
AimUriStr,
string
UserName,
string
UserPwd)
{
Uri BaseUri
=
new
Uri(BaseUriStr);
Uri AimUri
=
new
Uri(BaseUri, AimUriStr);
FtpWebRequest FtpRequest
=
(FtpWebRequest)WebRequest.Create(AimUri);
FtpRequest.KeepAlive
=
true
;
FtpRequest.Timeout
=
2000
;
FtpRequest.UsePassive
=
false
;
NetworkCredential FtpCred
=
new
NetworkCredential(UserName, UserPwd);
CredentialCache FtpCache
=
new
CredentialCache();
FtpCache.Add(AimUri, AuthType.Basic.ToString(), FtpCred);
FtpRequest.Credentials
=
FtpCache;
FtpRequest.Method
=
WebRequestMethods.Ftp.RemoveDirectory;
try
{
FtpWebResponse FtpResponse
=
(FtpWebResponse)FtpRequest.GetResponse();
if
(FtpResponse.StatusCode
==
FtpStatusCode.FileActionOK)
{
FtpResponse.Close();
return
true
;
}
else
{
FtpResponse.Close();
return
false
;
}
}
catch
(WebException e)
{
FtpWebResponse FtpResponse
=
(FtpWebResponse)e.Response;
//
如果返回信息表示文件不可操作或不存在,表明文件夹已经被删除
if
(FtpResponse.StatusCode
==
FtpStatusCode.ActionNotTakenFileUnavailable)
{
FtpResponse.Close();
return
true
;
}
else
{
//
返回其他错误:可能出现问题
FtpResponse.Close();
return
false
;
}
}
}
/**/
///
<summary>
///
删除文件夹,实现级联删除
///
返回:true成功,false失败
///
</summary>
///
<param name="BaseUriStr">
基Uri字符串:如ftp://192.168.1.190:21
</param>
///
<param name="AimUriStr">
目标目录,相对路径:如/FTF/FTFDEL
</param>
///
<param name="UserName">
用户名
</param>
///
<param name="UserPwd">
用户密码
</param>
///
<returns></returns>
public
static
bool
DeleteFtpListDirectory(
string
BaseUriStr,
string
AimUriStr,
string
UserName,
string
UserPwd)
{
List
<
string
>
DirectoryDetailList
=
ListFtpDirectory(BaseUriStr, AimUriStr, UserName, UserPwd);
foreach
(
string
ListDetail
in
DirectoryDetailList)
{
if
(ListDetail.EndsWith(
"
|D
"
))
{
//
删除文件夹内容
if
(ListFtpDirectory(BaseUriStr, AimUriStr
+
"
/
"
+
ListDetail.Split(
'
|
'
)[
0
], UserName, UserPwd).Count
==
0
)
{
if
(
!
DeleteFtpDirectory(BaseUriStr, AimUriStr
+
"
/
"
+
ListDetail.Split(
'
|
'
)[
0
], UserName, UserPwd))
{
return
false
;
}
}
else
{
if
(
!
DeleteFtpListDirectory(BaseUriStr, AimUriStr
+
"
/
"
+
ListDetail.Split(
'
|
'
)[
0
], UserName, UserPwd))
{
return
false
;
}
}
}
if
(ListDetail.EndsWith(
"
|F
"
))
{
//
删除文件
if
(
!
DeleteFtpFile(BaseUriStr, AimUriStr
+
"
/
"
+
ListDetail.Split(
'
|
'
)[
0
], UserName, UserPwd))
{
return
false
;
}
}
}
//
删除当前文件夹
if
(
!
DeleteFtpDirectory(BaseUriStr, AimUriStr, UserName, UserPwd))
{
return
false
;
}
return
true
;
}
#endregion
获取文件夹内文件和文件夹列表信息
#region
获取文件夹内文件和文件夹列表信息
/**/
///
<summary>
///
获取文件夹内文件信息
///
</summary>
///
<param name="BaseUriStr">
基Uri:如ftp://192.168.1.190:21
</param>
///
<param name="AimUriStr">
目标目录,相对路径:如/FTF/FTF1
</param>
///
<param name="UserName">
用户名
</param>
///
<param name="UserPwd">
用户密码
</param>
///
<returns></returns>
public
static
List
<
string
>
ListFtpDirectory(
string
BaseUriStr,
string
AimUriStr,
string
UserName,
string
UserPwd)
{
Uri BaseUri
=
new
Uri(BaseUriStr);
Uri AimUri
=
new
Uri(BaseUri, AimUriStr);
FtpWebRequest FtpRequest
=
(FtpWebRequest)WebRequest.Create(AimUri);
FtpRequest.KeepAlive
=
true
;
FtpRequest.ReadWriteTimeout
=
10000
;
FtpRequest.UsePassive
=
false
;
NetworkCredential FtpCred
=
new
NetworkCredential(UserName, UserPwd);
CredentialCache FtpCache
=
new
CredentialCache();
FtpCache.Add(AimUri, AuthType.Basic.ToString(), FtpCred);
FtpRequest.Credentials
=
FtpCache;
FtpRequest.Method
=
WebRequestMethods.Ftp.ListDirectoryDetails;
try
{
FtpWebResponse FtpResponse
=
(FtpWebResponse)FtpRequest.GetResponse();
StreamReader srd
=
new
StreamReader(FtpResponse.GetResponseStream(), Encoding.GetEncoding(
"
GB2312
"
));
string
ResponseBackStr
=
srd.ReadToEnd();
srd.Close();
FtpResponse.Close();
string
[] ListDetails
=
ResponseBackStr.Split(
new
string
[]
{
"
\r\n
"
}
, StringSplitOptions.RemoveEmptyEntries);
List
<
string
>
RtnList
=
new
List
<
string
>
();
foreach
(
string
ListDetail
in
ListDetails)
{
if
(ListDetail.StartsWith(
"
d
"
)
&&
(
!
ListDetail.EndsWith(
"
.
"
)))
{
string
FtpDirName
=
ListDetail.Substring(ListDetail.IndexOf(
'
:
'
)
+
3
).TrimStart();
RtnList.Add(FtpDirName
+
"
|D
"
);
}
else
if
(ListDetail.StartsWith(
"
-
"
))
{
string
FtpDirName
=
ListDetail.Substring(ListDetail.IndexOf(
'
:
'
)
+
3
).TrimStart();
RtnList.Add(FtpDirName
+
"
|F
"
);
}
}
return
RtnList;
}
catch
(WebException e)
{
FtpWebResponse FtpResponse
=
(FtpWebResponse)e.Response;
FtpResponse.Close();
return
new
List
<
string
>
();
}
}
#endregion
删除指定文件
#region
删除指定文件
/**/
///
<summary>
///
删除指定文件
///
</summary>
///
<param name="BaseUriStr">
基Uri字符串,如ftp://192.168.1.190:21
</param>
///
<param name="AimUriStr">
目标目录,相对路径:如/FTF/FTFDEL
</param>
///
<param name="UserName">
用户名
</param>
///
<param name="UserPwd">
用户密码
</param>
///
<returns></returns>
public
static
bool
DeleteFtpFile(
string
BaseUriStr,
string
AimUriStr,
string
UserName,
string
UserPwd)
{
Uri BaseUri
=
new
Uri(BaseUriStr);
Uri AimUri
=
new
Uri(BaseUri, AimUriStr);
FtpWebRequest FtpRequest
=
(FtpWebRequest)WebRequest.Create(AimUri);
FtpRequest.KeepAlive
=
true
;
FtpRequest.Timeout
=
2000
;
FtpRequest.UsePassive
=
false
;
NetworkCredential FtpCred
=
new
NetworkCredential(UserName, UserPwd);
CredentialCache FtpCache
=
new
CredentialCache();
FtpCache.Add(AimUri, AuthType.Basic.ToString(), FtpCred);
FtpRequest.Credentials
=
FtpCache;
FtpRequest.Method
=
WebRequestMethods.Ftp.DeleteFile;
try
{
FtpWebResponse FtpResponse
=
(FtpWebResponse)FtpRequest.GetResponse();
if
(FtpResponse.StatusCode
==
FtpStatusCode.FileActionOK)
{
FtpResponse.Close();
return
true
;
}
else
{
FtpResponse.Close();
return
false
;
}
}
catch
(WebException e)
{
FtpWebResponse FtpResponse
=
(FtpWebResponse)e.Response;
if
(FtpResponse.StatusCode
==
FtpStatusCode.ActionNotTakenFileUnavailable)
{
FtpResponse.Close();
return
true
;
}
else
{
FtpResponse.Close();
return
false
;
}
}
}
#endregion
上传文件
#region
上传文件
/**/
///
<summary>
///
上传文件到指定位置
///
</summary>
///
<param name="BaseUriStr">
基Uri字符串,如ftp://192.168.1.190:21
</param>
///
<param name="AimUriStr">
目标位置,相对路径:如/FTF/FTFDEL/K.pdf
</param>
///
<param name="UserName">
用户名
</param>
///
<param name="UserPwd">
用户密码
</param>
///
<param name="SrcFilePath">
源文件位置
</param>
///
<returns></returns>
public
static
bool
UploadFtpFile(
string
BaseUriStr,
string
AimUriStr,
string
UserName,
string
UserPwd,
string
SrcFilePath)
{
Uri BaseUri
=
new
Uri(BaseUriStr);
Uri AimUri
=
new
Uri(BaseUri, AimUriStr);
FtpWebRequest FtpRequest
=
(FtpWebRequest)WebRequest.Create(AimUri);
FtpRequest.KeepAlive
=
true
;
FtpRequest.ReadWriteTimeout
=
10000
;
FtpRequest.UsePassive
=
false
;
NetworkCredential FtpCred
=
new
NetworkCredential(UserName, UserPwd);
CredentialCache FtpCache
=
new
CredentialCache();
FtpCache.Add(AimUri, AuthType.Basic.ToString(), FtpCred);
FtpRequest.Credentials
=
FtpCache;
FtpRequest.Method
=
WebRequestMethods.Ftp.UploadFile;
try
{
Stream stm
=
FtpRequest.GetRequestStream();
byte
[] RequestByteArray
=
File.ReadAllBytes(SrcFilePath);
stm.Write(RequestByteArray,
0
, RequestByteArray.Length);
stm.Close();
FtpWebResponse FtpResponse
=
(FtpWebResponse)FtpRequest.GetResponse();
if
(FtpResponse.StatusCode
==
FtpStatusCode.ClosingData)
{
FtpResponse.Close();
FileInfo FI
=
new
FileInfo(SrcFilePath);
if
(GetFtpFileSize(BaseUriStr, AimUriStr, UserName, UserPwd)
==
FI.Length)
{
return
true
;
}
else
{
return
false
;
}
}
else
{
FtpResponse.Close();
return
false
;
}
}
catch
(WebException e)
{
FtpWebResponse FtpResponse
=
(FtpWebResponse)e.Response;
FtpResponse.Close();
return
false
;
}
}
/**/
///
<summary>
///
获取文件尺寸
///
返回文件字节数
///
</summary>
///
<param name="BaseUriStr">
基Uri字符串,如ftp://192.168.1.190:21
</param>
///
<param name="AimUriStr">
目标位置,相对路径:如/FTF/FTFDEL/K.pdf
</param>
///
<param name="UserName">
用户名
</param>
///
<param name="UserPwd">
用户密码
</param>
///
<returns></returns>
public
static
int
GetFtpFileSize(
string
BaseUriStr,
string
AimUriStr,
string
UserName,
string
UserPwd)
{
Uri BaseUri
=
new
Uri(BaseUriStr);
Uri AimUri
=
new
Uri(BaseUri, AimUriStr);
FtpWebRequest FtpRequest
=
(FtpWebRequest)WebRequest.Create(AimUri);
FtpRequest.KeepAlive
=
true
;
FtpRequest.ReadWriteTimeout
=
10000
;
FtpRequest.UsePassive
=
false
;
NetworkCredential FtpCred
=
new
NetworkCredential(UserName, UserPwd);
CredentialCache FtpCache
=
new
CredentialCache();
FtpCache.Add(AimUri, AuthType.Basic.ToString(), FtpCred);
FtpRequest.Credentials
=
FtpCache;
FtpRequest.Method
=
WebRequestMethods.Ftp.GetFileSize;
try
{
FtpWebResponse FtpResponse
=
(FtpWebResponse)FtpRequest.GetResponse();
long
FileSize
=
FtpResponse.ContentLength;
FtpResponse.Close();
return
Convert.ToInt32(FileSize);
}
catch
{
return
-
1
;
}
}
#endregion
文件重命名
#region
文件重命名
/**/
///
<summary>
///
文件重命名、文件移动
///
</summary>
///
<param name="BaseUriStr">
基Uri字符串,如ftp://192.168.1.190:21
</param>
///
<param name="SrcUriStr">
源位置,相对路径:如/FTF/FTFDEL/K.pdf
</param>
///
<param name="AimUriStr">
目标位置,相对路径:如/FTF/FTFDEL/K.pdf
</param>
///
<param name="UserName">
用户名
</param>
///
<param name="UserPwd">
用户密码
</param>
///
<returns></returns>
public
static
bool
RenameFtpFile(
string
BaseUriStr,
string
SrcUriStr,
string
AimUriStr,
string
UserName,
string
UserPwd)
{
Uri BaseUri
=
new
Uri(BaseUriStr);
Uri AimUri
=
new
Uri(BaseUri, SrcUriStr);
FtpWebRequest FtpRequest
=
(FtpWebRequest)WebRequest.Create(AimUri);
FtpRequest.KeepAlive
=
true
;
FtpRequest.ReadWriteTimeout
=
10000
;
FtpRequest.UsePassive
=
false
;
NetworkCredential FtpCred
=
new
NetworkCredential(UserName, UserPwd);
CredentialCache FtpCache
=
new
CredentialCache();
FtpCache.Add(AimUri, AuthType.Basic.ToString(), FtpCred);
FtpRequest.Credentials
=
FtpCache;
FtpRequest.Method
=
WebRequestMethods.Ftp.Rename;
FtpRequest.RenameTo
=
AimUriStr;
try
{
FtpWebResponse FtpResponse
=
(FtpWebResponse)FtpRequest.GetResponse();
if
(FtpResponse.StatusCode
==
FtpStatusCode.FileActionOK)
{
return
true
;
}
else
{
return
false
;
}
}
catch
(WebException e)
{
FtpWebResponse FtpResponse
=
(FtpWebResponse)e.Response;
FtpResponse.Close();
return
false
;
}
}
#endregion
}
}
查看全文
相关阅读:
最舒适的路线(并查集)
POJ 2411 状态压缩DP
NYOJ 708 ones
HUD 1024 Max Sum Plus Plus
最长上升子序列
HDU 4717 The Moving Points
重新开始写随笔
读书的意义
读《如何阅读一本书》笔记
读《GRAY HAT PYTHON》笔记
原文地址:https://www.cnblogs.com/lixx/p/1317039.html
最新文章
什么是多态,多态的实现方法是什么?
Python--装饰器
Python中enumerate()以及zip()函数的使用例子
Python中的eval函数
Python之迭代器和生成器
Java类型信息(Class对象)与反射机制
Python基础中元组、列表、字典、字符串、集合的总结
Android项目开发新版本需要注意的事项
Java面向对象
Java异常
热门文章
Java抽象类包访问权限
Java接口的特点
Java子类实例化函数复写对象转型
Java重载、构造函数和this、static要点
N的N次方
连分数
HDU 4390 Number Sequence(容斥原理)
UVa 11168 Airport凸包与直线方程
HDU 1348 Wall(基础凸包问题)
HDU3548 Enumerate the Triangles(优化)
Copyright © 2011-2022 走看看