ftpclient.docx
《ftpclient.docx》由会员分享,可在线阅读,更多相关《ftpclient.docx(21页珍藏版)》请在冰豆网上搜索。
ftpclient
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Net;
usingSystem.IO;
namespaceFTP操作
{
///
///FTP客户端操作类
///
publicclassFtpClient
{
#region构造函数
///
///创建FTP工具
///
///默认不使用SSL,使用二进制传输方式,使用被动模式
///
///
///主机名称
///用户名
///密码
publicFtpClient(stringhost,stringuserId,stringpassword)
:
this(host,userId,password,21,null,false,true,true)
{
}
///
///创建FTP工具
///
///主机名称
///用户名
///密码
///端口
///允许Ssl
///代理
///允许二进制
///允许被动模式
publicFtpClient(stringhost,stringuserId,stringpassword,intport,IWebProxyproxy,boolenableSsl,booluseBinary,boolusePassive)
{
this.userId=userId;
this.password=password;
if(host.ToLower().StartsWith("ftp:
//"))
{
this.host=host;
}
else
{
this.host="ftp:
//"+host;
}
this.port=port;
this.proxy=proxy;
this.enableSsl=enableSsl;
this.useBinary=useBinary;
this.usePassive=usePassive;
}
#endregion
#region主机
privatestringhost=string.Empty;
///
///主机
///
publicstringHost
{
get
{
returnthis.host?
?
string.Empty;
}
}
#endregion
#region登录用户名
privatestringuserId=string.Empty;
///
///登录用户名
///
publicstringUserId
{
get
{
returnthis.userId;
}
}
#endregion
#region密码
privatestringpassword=string.Empty;
///
///密码
///
publicstringPassword
{
get
{
returnthis.password;
}
}
#endregion
#region代理
IWebProxyproxy=null;
///
///代理
///
publicIWebProxyProxy
{
get
{
returnthis.proxy;
}
set
{
this.proxy=value;
}
}
#endregion
#region端口
privateintport=21;
///
///端口
///
publicintPort
{
get
{
returnport;
}
set
{
this.port=value;
}
}
#endregion
#region设置是否允许Ssl
privateboolenableSsl=false;
///
///EnableSsl
///
publicboolEnableSsl
{
get
{
returnenableSsl;
}
}
#endregion
#region使用被动模式
privateboolusePassive=true;
///
///被动模式
///
publicboolUsePassive
{
get
{
returnusePassive;
}
set
{
this.usePassive=value;
}
}
#endregion
#region二进制方式
privatebooluseBinary=true;
///
///二进制方式
///
publicboolUseBinary
{
get
{
returnuseBinary;
}
set
{
this.useBinary=value;
}
}
#endregion
#region远端路径
privatestringremotePath="/";
///
///远端路径
///
///返回FTP服务器上的当前路径(可以是/或/a/../的形式)
///
///
publicstringRemotePath
{
get
{
returnremotePath;
}
set
{
stringresult="/";
if(!
string.IsNullOrEmpty(value)&&value!
="/")
{
result="/"+value.TrimStart('/').TrimEnd('/')+"/";
}
this.remotePath=result;
}
}
#endregion
#region创建一个FTP连接
///
///创建一个FTP请求
///
///请求地址
///请求方法
///FTP请求
privateFtpWebRequestCreateRequest(stringurl,stringmethod)
{
//建立连接
FtpWebRequestrequest=(FtpWebRequest)WebRequest.Create(url);
request.Credentials=newNetworkCredential(this.userId,this.password);
request.Proxy=this.proxy;
request.KeepAlive=false;//命令执行完毕之后关闭连接
request.UseBinary=useBinary;
request.UsePassive=usePassive;
request.EnableSsl=enableSsl;
request.Method=method;
returnrequest;
}
#endregion
#region上传一个文件到远端路径下
///
///把文件上传到FTP服务器的RemotePath下
///
///本地文件信息
///要保存到FTP文件服务器上的名称
publicboolUpload(FileInfolocalFile,stringremoteFileName)
{
boolresult=false;
if(localFile.Exists)
{
stringurl=Host.TrimEnd('/')+RemotePath+remoteFileName;
FtpWebRequestrequest=CreateRequest(url,WebRequestMethods.Ftp.UploadFile);
//上传数据
using(Streamrs=request.GetRequestStream())
using(FileStreamfs=localFile.OpenRead())
{
byte[]buffer=newbyte[4096];//4K
intcount=fs.Read(buffer,0,buffer.Length);
while(count>0)
{
rs.Write(buffer,0,count);
count=fs.Read(buffer,0,buffer.Length);
}
fs.Close();
result=true;
}
returnresult;
}
thrownewException(string.Format("本地文件不存在,文件路径:
{0}",localFile.FullName));
}
#endregion
#region从FTP服务器上下载文件
///
///从当前目录下下载文件
///
///如果本地文件存在,则从本地文件结束的位置开始下载.
///
///
///服务器上的文件名称
///本地文件名称
///返回一个值,指示是否下载成功
publicboolDownload(stringserverName,stringlocalName)
{
boolresult=false;
using(FileStreamfs=newFileStream(localName,FileMode.OpenOrCreate))//创建或打开本地文件
{
//建立连接
stringurl=Host.TrimEnd('/')+RemotePath+serverName;
FtpWebRequestrequest=CreateRequest(url,WebRequestMethods.Ftp.DownloadFile);
request.ContentOffset=fs.Length;
using(FtpWebResponseresponse=(FtpWebResponse)request.GetResponse())
{
fs.Position=fs.Length;
byte[]buffer=newbyte[4096];//4K
intcount=response.GetResponseStream().Read(buffer,0,buffer.Length);
while(count>0)
{
fs.Write(buffer,0,count);
count=response.GetResponseStream().Read(buffer,0,buffer.Length);
}
response.GetResponseStream().Close();
}
result=true;
}
returnresult;
}
#endregion
#region重命名FTP服务器上的文件
///
///文件更名
///
///原文件名
///新文件名
///返回一个值,指示更名是否成功
publicboolRename(stringoldFileName,stringnewFileName)
{
boolresult=false;
//建立连接
stringurl=Host.TrimEnd('/')+RemotePath+oldFileName;
FtpWebRequestrequest=CreateRequest(url,WebRequestMethods.Ftp.Rename);
request.RenameTo=newFileName;
using(FtpWebResponseresponse=(FtpWebResponse)request.GetResponse())
{
result=true;
}
returnresult;
}
#endregion
#region从当前目录下获取文件列表
///
///获取当前目录下文件列表
///
///
publicListGetFileList()
{
Listresult=newList();
//建立连接
stringurl=Host.TrimEnd('/')+RemotePath;
FtpWebRequestrequest=CreateRequest(url,WebRequestMethods.Ftp.ListDirectory);
using(FtpWebResponseresponse=(FtpWebResponse)request.GetResponse())
{
StreamReaderreader=newStreamReader(response.GetResponseStream(),System.Text.Encoding.Default);//中文文件名
stringline=reader.ReadLine();
while(line!
=null)
{
result.Add(line);
line=reader.ReadLine();
}
}
returnresult;
}
#endregion
#region从FTP服务器上获取文件和文件夹列表
///
///获取详细列表
///
///
publicListGetFileDetails()
{
Listresult=newList();
//建立连接
stringurl=Host.TrimEnd('/')+RemotePath;
FtpWebRequestrequest=CreateRequest(url,WebRequestMethods.Ftp.ListDirectoryDetails);
using(FtpWebResponseresponse=(FtpWebResponse)request.GetResponse())
{
StreamReaderreader=newStreamReader(response.GetResponseStream(),System.Text.Encoding.Default);//中文文件名
stringline=reader.ReadLine();
while(line!
=null)
{
result.Add(line);
line=reader.ReadLine();
}
}
returnresult;
}
#endregion
#region从FTP服务器上删除文件
///
///删除FTP服务器上的文件
///
///文件名称
///返回一个值,指示是否删除成功
publicboolDeleteFile(stringfileName)
{
boolresult=false;
//建立连接
stringurl=Host.TrimEnd('/')+RemotePath+fileName;
FtpWebRequestrequest=CreateRequest(url,WebRequestMethods.Ftp.DeleteFile);
using(FtpWebResponseresponse=(FtpWebResponse)request.GetResponse())
{
result=true;
}
returnresult;
}
#endregion
#region在FTP服务器上创建目录
///
///在当前目录下创建文件夹
///
///文件夹名称
///返回一个值,指示是否创建成功
publicboolMakeDirectory(stringdirName)
{
boolresult=false;
//建立连接
stringurl=Host.TrimEnd('/')+RemotePath+dirName;
FtpWebRequestrequest=CreateRequest(url,WebRequestMethods.Ftp.MakeDirectory);
using(FtpWebResponseresponse=(FtpWebResponse)request.GetResponse())
{
result=true;
}
returnresult;
}
#endregion
#region从FTP服务器上删除目录
///
///删除文件夹
///
///文件夹名称
///返回一个值,指示是否删除成功
publicboolDeleteDirectory(stringdirName)
{
boolresult=false;
//建立连接
stringurl=Host.TrimEnd('/')+RemotePath+dirName;
FtpWebRequestrequest=CreateRequest(url,WebRequestMethods.Ftp.RemoveDirectory);
using(FtpWebResponseresponse=(FtpWebResponse)request.GetResponse())
{
result=true;
}
returnresult;
}
#endregion
#region从FTP服务器上获取文件大小
///
///获取文件大小
///
///
///
publiclongGetFileSize(stringfileName)
{
longresult=0;
//建立连接
stringurl=Host.TrimEnd('/')+RemotePath+fileName;
FtpWebRequestrequest=CreateRequest(url,WebRequestMethods.Ftp.GetFileSize);
using(FtpWebResponseresponse=(FtpWebResponse)request.GetResponse())
{
result=response.ContentLength;
}
returnresult;
}
#endregion
#region给FTP服务器上的文件追加内容
///
///给FTP服务器上的文件