C#操作ftp类完整实例
本文实例讲述了C#操作ftp类。分享给大家供大家参考。具体如下:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.IO;
usingSystem.Net;
usingSystem.Globalization;
namespaceFtpTest1
{
publicclassFtpWeb
{
stringftpServerIP;
stringftpRemotePath;
stringftpUserID;
stringftpPassword;
stringftpURI;
///<summary>
///连接FTP
///</summary>
///<paramname="FtpServerIP">FTP连接地址</param>
///<paramname="FtpRemotePath">指定FTP连接成功后的当前目录,如果不指定即默认为根目录</param>
///<paramname="FtpUserID">用户名</param>
///<paramname="FtpPassword">密码</param>
publicFtpWeb(stringFtpServerIP,stringFtpRemotePath,stringFtpUserID,stringFtpPassword)
{
ftpServerIP=FtpServerIP;
ftpRemotePath=FtpRemotePath;
ftpUserID=FtpUserID;
ftpPassword=FtpPassword;
ftpURI="ftp://"+ftpServerIP+"/";
}
staticvoidMain(){
//stringfile="c:\\aq3.gifa";
//FileInfofileInf=newFileInfo(file);
//if(!fileInf.Exists)
//{
//Console.WriteLine(file+"noexists");
//}
//else{
//Console.WriteLine("yes");
//}
//Console.ReadLine();
FtpWebfw=newFtpWeb("121.11.65.10","","aa1","aa");
string[]filePaths={"c:\\aq3.gif1","c:\\aq2.gif1","c:\\bsmain_runtime.log"};
Console.WriteLine(fw.UploadFile(filePaths));
Console.ReadLine();
}
//上传文件
publicstringUploadFile(string[]filePaths){
StringBuildersb=newStringBuilder();
if(filePaths!=null&&filePaths.Length>0){
foreach(varfileinfilePaths){
sb.Append(Upload(file));
}
}
returnsb.ToString();
}
///<summary>
///上传文件
///</summary>
///<paramname="filename"></param>
privatestringUpload(stringfilename)
{
FileInfofileInf=newFileInfo(filename);
if(!fileInf.Exists){
returnfilename+"不存在!\n";
}
stringuri=ftpURI+fileInf.Name;
FtpWebRequestreqFTP;
reqFTP=(FtpWebRequest)FtpWebRequest.Create(newUri(uri));
reqFTP.Credentials=newNetworkCredential(ftpUserID,ftpPassword);
reqFTP.KeepAlive=false;
reqFTP.Method=WebRequestMethods.Ftp.UploadFile;
reqFTP.UseBinary=true;
reqFTP.UsePassive=false;//选择主动还是被动模式
//EnteringPassiveMode
reqFTP.ContentLength=fileInf.Length;
intbuffLength=2048;
byte[]buff=newbyte[buffLength];
intcontentLen;
FileStreamfs=fileInf.OpenRead();
try
{
Streamstrm=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(Exceptionex)
{
return"同步"+filename+"时连接不上服务器!\n";
//Insert_Standard_ErrorLog.Insert("FtpWeb","UploadError-->"+ex.Message);
}
return"";
}
///<summary>
///下载
///</summary>
///<paramname="filePath"></param>
///<paramname="fileName"></param>
publicvoidDownload(stringfilePath,stringfileName)
{
FtpWebRequestreqFTP;
try
{
FileStreamoutputStream=newFileStream(filePath+"\\"+fileName,FileMode.Create);
reqFTP=(FtpWebRequest)FtpWebRequest.Create(newUri(ftpURI+fileName));
reqFTP.Method=WebRequestMethods.Ftp.DownloadFile;
reqFTP.UseBinary=true;
reqFTP.Credentials=newNetworkCredential(ftpUserID,ftpPassword);
FtpWebResponseresponse=(FtpWebResponse)reqFTP.GetResponse();
StreamftpStream=response.GetResponseStream();
longcl=response.ContentLength;
intbufferSize=2048;
intreadCount;
byte[]buffer=newbyte[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(Exceptionex)
{
Insert_Standard_ErrorLog.Insert("FtpWeb","DownloadError-->"+ex.Message);
}
}
///<summary>
///删除文件
///</summary>
///<paramname="fileName"></param>
publicvoidDelete(stringfileName)
{
try
{
stringuri=ftpURI+fileName;
FtpWebRequestreqFTP;
reqFTP=(FtpWebRequest)FtpWebRequest.Create(newUri(uri));
reqFTP.Credentials=newNetworkCredential(ftpUserID,ftpPassword);
reqFTP.KeepAlive=false;
reqFTP.Method=WebRequestMethods.Ftp.DeleteFile;
stringresult=String.Empty;
FtpWebResponseresponse=(FtpWebResponse)reqFTP.GetResponse();
longsize=response.ContentLength;
Streamdatastream=response.GetResponseStream();
StreamReadersr=newStreamReader(datastream);
result=sr.ReadToEnd();
sr.Close();
datastream.Close();
response.Close();
}
catch(Exceptionex)
{
Insert_Standard_ErrorLog.Insert("FtpWeb","DeleteError-->"+ex.Message+"文件名:"+fileName);
}
}
///<summary>
///获取当前目录下明细(包含文件和文件夹)
///</summary>
///<returns></returns>
publicstring[]GetFilesDetailList()
{
string[]downloadFiles;
try
{
StringBuilderresult=newStringBuilder();
FtpWebRequestftp;
ftp=(FtpWebRequest)FtpWebRequest.Create(newUri(ftpURI));
ftp.Credentials=newNetworkCredential(ftpUserID,ftpPassword);
ftp.Method=WebRequestMethods.Ftp.ListDirectoryDetails;
WebResponseresponse=ftp.GetResponse();
StreamReaderreader=newStreamReader(response.GetResponseStream());
stringline=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();
returnresult.ToString().Split('\n');
}
catch(Exceptionex)
{
downloadFiles=null;
Insert_Standard_ErrorLog.Insert("FtpWeb","GetFilesDetailListError-->"+ex.Message);
returndownloadFiles;
}
}
///<summary>
///获取当前目录下文件列表(仅文件)
///</summary>
///<returns></returns>
publicstring[]GetFileList(stringmask)
{
string[]downloadFiles;
StringBuilderresult=newStringBuilder();
FtpWebRequestreqFTP;
try
{
reqFTP=(FtpWebRequest)FtpWebRequest.Create(newUri(ftpURI));
reqFTP.UseBinary=true;
reqFTP.Credentials=newNetworkCredential(ftpUserID,ftpPassword);
reqFTP.Method=WebRequestMethods.Ftp.ListDirectory;
WebResponseresponse=reqFTP.GetResponse();
StreamReaderreader=newStreamReader(response.GetResponseStream());
stringline=reader.ReadLine();
while(line!=null)
{
if(mask.Trim()!=string.Empty&&mask.Trim()!="*.*")
{
stringmask_=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();
returnresult.ToString().Split('\n');
}
catch(Exceptionex)
{
downloadFiles=null;
if(ex.Message.Trim()!="远程服务器返回错误:(550)文件不可用(例如,未找到文件,无法访问文件)。")
{
Insert_Standard_ErrorLog.Insert("FtpWeb","GetFileListError-->"+ex.Message.ToString());
}
returndownloadFiles;
}
}
///<summary>
///获取当前目录下所有的文件夹列表(仅文件夹)
///</summary>
///<returns></returns>
publicstring[]GetDirectoryList()
{
string[]drectory=GetFilesDetailList();
stringm=string.Empty;
foreach(stringstrindrectory)
{
if(str.Trim().Substring(0,1).ToUpper()=="D")
{
m+=str.Substring(54).Trim()+"\n";
}
}
char[]n=newchar[]{'\n'};
returnm.Split(n);
}
///<summary>
///判断当前目录下指定的子目录是否存在
///</summary>
///<paramname="RemoteDirectoryName">指定的目录名</param>
publicboolDirectoryExist(stringRemoteDirectoryName)
{
string[]dirList=GetDirectoryList();
foreach(stringstrindirList)
{
if(str.Trim()==RemoteDirectoryName.Trim())
{
returntrue;
}
}
returnfalse;
}
///<summary>
///判断当前目录下指定的文件是否存在
///</summary>
///<paramname="RemoteFileName">远程文件名</param>
publicboolFileExist(stringRemoteFileName)
{
string[]fileList=GetFileList("*.*");
foreach(stringstrinfileList)
{
if(str.Trim()==RemoteFileName.Trim())
{
returntrue;
}
}
returnfalse;
}
///<summary>
///创建文件夹
///</summary>
///<paramname="dirName"></param>
publicvoidMakeDir(stringdirName)
{
FtpWebRequestreqFTP;
try
{
//dirName=nameofthedirectorytocreate.
reqFTP=(FtpWebRequest)FtpWebRequest.Create(newUri(ftpURI+dirName));
reqFTP.Method=WebRequestMethods.Ftp.MakeDirectory;
reqFTP.UseBinary=true;
reqFTP.Credentials=newNetworkCredential(ftpUserID,ftpPassword);
FtpWebResponseresponse=(FtpWebResponse)reqFTP.GetResponse();
StreamftpStream=response.GetResponseStream();
ftpStream.Close();
response.Close();
}
catch(Exceptionex)
{
Insert_Standard_ErrorLog.Insert("FtpWeb","MakeDirError-->"+ex.Message);
}
}
///<summary>
///获取指定文件大小
///</summary>
///<paramname="filename"></param>
///<returns></returns>
publiclongGetFileSize(stringfilename)
{
FtpWebRequestreqFTP;
longfileSize=0;
try
{
reqFTP=(FtpWebRequest)FtpWebRequest.Create(newUri(ftpURI+filename));
reqFTP.Method=WebRequestMethods.Ftp.GetFileSize;
reqFTP.UseBinary=true;
reqFTP.Credentials=newNetworkCredential(ftpUserID,ftpPassword);
FtpWebResponseresponse=(FtpWebResponse)reqFTP.GetResponse();
StreamftpStream=response.GetResponseStream();
fileSize=response.ContentLength;
ftpStream.Close();
response.Close();
}
catch(Exceptionex)
{
Insert_Standard_ErrorLog.Insert("FtpWeb","GetFileSizeError-->"+ex.Message);
}
returnfileSize;
}
///<summary>
///改名
///</summary>
///<paramname="currentFilename"></param>
///<paramname="newFilename"></param>
publicvoidReName(stringcurrentFilename,stringnewFilename)
{
FtpWebRequestreqFTP;
try
{
reqFTP=(FtpWebRequest)FtpWebRequest.Create(newUri(ftpURI+currentFilename));
reqFTP.Method=WebRequestMethods.Ftp.Rename;
reqFTP.RenameTo=newFilename;
reqFTP.UseBinary=true;
reqFTP.Credentials=newNetworkCredential(ftpUserID,ftpPassword);
FtpWebResponseresponse=(FtpWebResponse)reqFTP.GetResponse();
StreamftpStream=response.GetResponseStream();
ftpStream.Close();
response.Close();
}
catch(Exceptionex)
{
Insert_Standard_ErrorLog.Insert("FtpWeb","ReNameError-->"+ex.Message);
}
}
///<summary>
///移动文件
///</summary>
///<paramname="currentFilename"></param>
///<paramname="newFilename"></param>
publicvoidMovieFile(stringcurrentFilename,stringnewDirectory)
{
ReName(currentFilename,newDirectory);
}
希望本文所述对大家的C#程序设计有所帮助。