FTP上傳,下載,新建,刪除,FTP間傳送文件等
最近項目需要對FTP服務(wù)器進(jìn)行操作,現(xiàn)把實現(xiàn)總結(jié)如下:
打算分2篇總結(jié):
第1篇總結(jié)Ftp的一些常規(guī)的操作實現(xiàn)(例如:上傳,下載,新建,刪除,FTP間互傳文件等操作)
第2篇總結(jié)Ftp的操作的一些其他實現(xiàn)(例如:異步上傳,異步下載等其他操作)
Microsoft .NET Framework 2.0新增加了3個類使我們很方便的對文件傳輸協(xié)議(FTP)服務(wù)器進(jìn)行操作
FtpWebRequest類:實現(xiàn)文件傳輸協(xié)議(FTP)客戶端
public sealed class FtpWebRequest : WebRequest
FtpWebResponse類:封裝文件傳輸協(xié)議(FTP)服務(wù)器對請求的響應(yīng)
public class FtpWebResponse : WebResponse, IDisposable
WebRequestMethods.Ftp類:表示可與FTP請求一起使用的FTP協(xié)議方法的類型,無法繼承此類
public static class Ftp
類關(guān)系圖
附件:
FtpWebResponse_class.jpg 操作ftp的一般步驟我總結(jié)如下:
第一步:WebRequest.Create方法,獲得FtpWebRequest的實例
第二步:利用WebRequestMethods.Ftp設(shè)置FtpWebRequest的Method屬性,指定使用的FTP協(xié)議方法的類型
第三步:設(shè)置FtpWebRequest的Credentials屬性,指定用戶名和密碼
第四步:發(fā)出請求
第五步:接收響應(yīng)數(shù)據(jù)流(有些ftp操作可能沒這一步,例如給文件夾改名)
第六步:關(guān)閉流
下面從幾段代碼來分別展示ftp的不同操作:
1.文件夾和文件信息關(guān)鍵知識說明:
a.FtpWebRequest類沒有公開的構(gòu)造函數(shù),我們通過WebRequest.Create方法,獲得FtpWebRequest的實例
b.通過WebRequestMethods.Ftp.ListDirectoryDetails(詳細(xì)列表)或者WebRequestMethods.Ftp.ListDirectory(簡短列表)獲取FTP服務(wù)器上的文件列表
c.請求返回的數(shù)據(jù)在GetResponseStream方法返回的流中
d.字符編碼請用System.Text.Encoding.Default,要不中文名會亂碼
e.FtpWebRequest.Credentials屬性設(shè)置登陸用戶名和密碼
f.FtpWebRequest.UseBinary屬性,true,指示服務(wù)器要傳輸?shù)氖嵌M(jìn)制數(shù)據(jù).false,指示數(shù)據(jù)為文本。默認(rèn)值為true
g.FtpWebRequest.EnableSsl屬性,如果控制和數(shù)據(jù)傳輸是加密的,則為true.否則為false.默認(rèn)值為 false
實例代碼:
獲取
ftp://218.16.229.120上的文件信息
- Uri uri = new Uri ( "ftp://218.16.229.120" );
- FtpWebRequest listRequest = ( FtpWebRequest ) WebRequest.Create ( uri );
- listRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
- //listRequest.Method = WebRequestMethods.Ftp.ListDirectory;
- string ftpUser = "";
- string ftpPassWord = "";
- listRequest.Credentials = new NetworkCredential ( ftpUser , ftpPassWord );
- FtpWebResponse listResponse = ( FtpWebResponse ) listRequest.GetResponse ( );
- Stream responseStream = listResponse.GetResponseStream ( );
- StreamReader readStream = new StreamReader ( responseStream , System.Text.Encoding.Default );
- if ( readStream != null )
- {
- MessageBox.Show ( readStream.ReadToEnd ( ) );
- }
- MessageBox.Show ( string.Format ( "狀態(tài): {0},{1}" ,listResponse.StatusCode, listResponse.StatusDescription ) );
- listResponse.Close ( );
- responseStream.Close ( );
- readStream.Close ( );
復(fù)制代碼 通過WebRequestMethods.Ftp.ListDirectoryDetails(詳細(xì)列表)或者WebRequestMethods.Ftp.ListDirectory(簡短列表)返回的結(jié)果是不一樣的.請看圖
附件:
FtpWebResponse_msg.jpg 利用WebRequestMethods.Ftp.ListDirectoryDetails,readStream.ReadToEnd ( )返回的字符串比較復(fù)雜(不同類型的Ftp會有不同返回形式的返回結(jié)果),要把里面的文件夾和文件區(qū)分列出來比較繁瑣,代碼比較多,所以我沒寫出來,感興趣的朋友可以留言,我可以郵件發(fā)送.
2.取ftp登陸身份驗證完成后的歡迎信息關(guān)鍵知識說明:
a.FtpWebResponse.WelcomeMessage屬性獲取身份驗證完成時FTP服務(wù)器發(fā)送的消息
實例代碼:
獲取
ftp://218.16.229.120登陸身份驗證完成后的歡迎信息
- Uri uri = new Uri ( "ftp://218.16.229.120" );
- FtpWebRequest listRequest = ( FtpWebRequest ) WebRequest.Create ( uri );
- listRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
- string ftpUser = "";
- string ftpPassWord = "";
- listRequest.Credentials = new NetworkCredential ( ftpUser , ftpPassWord );
- FtpWebResponse listResponse = ( FtpWebResponse ) listRequest.GetResponse ( );
- MessageBox.Show ( listResponse.WelcomeMessage );
復(fù)制代碼 附加說明:要是FTP服務(wù)器的歡迎信息帶有中文,運行這段代碼時可能會發(fā)生異常(基礎(chǔ)連接已經(jīng)關(guān)閉: 服務(wù)器提交了協(xié)議).
解決辦法:打補(bǔ)丁Microsoft .NET Framework 2.0 Service Pack 1
3.重命名目錄關(guān)鍵知識說明:
a.WebRequestMethods.Ftp.Rename表示重命名目錄的FTP協(xié)議方法
b.FtpWebRequest.RenameTo屬性重命名的新名稱
實例代碼:
把
ftp://218.16.229.120/上的a目錄重命名為av
- Uri uri = new Uri ( "ftp://218.16.229.120/a" );
- FtpWebRequest listRequest = ( FtpWebRequest ) WebRequest.Create ( uri );
- listRequest.Method = WebRequestMethods.Ftp.Rename;
- string ftpUser = "";
- string ftpPassWord = "";
- listRequest.Credentials = new NetworkCredential ( ftpUser , ftpPassWord );
- listRequest.RenameTo = "av";
- FtpWebResponse listResponse = ( FtpWebResponse ) listRequest.GetResponse ( );
- MessageBox.Show ( listResponse.StatusDescription );