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#程序设计有所帮助。