以文本方式查看主題

-  曙海教育集團論壇  (http://www.scb-ycwb.com/bbs/index.asp)
--  Microsoft.NET Framework  (http://www.scb-ycwb.com/bbs/list.asp?boardid=68)
----  Microsoft .NET Framework 2.0對文件傳輸協議(FTP)操作總結1  (http://www.scb-ycwb.com/bbs/dispbbs.asp?boardid=68&id=2546)

--  作者:wangxinxin
--  發布時間:2010-12-13 14:50:39
--  Microsoft .NET Framework 2.0對文件傳輸協議(FTP)操作總結1
FTP上傳,下載,新建,刪除,FTP間傳送文件等

最近項目需要對FTP服務器進行操作,現把實現總結如下:
打算分2篇總結:
第1篇總結Ftp的一些常規的操作實現(例如:上傳,下載,新建,刪除,FTP間互傳文件等操作)
第2篇總結Ftp的操作的一些其他實現(例如:異步上傳,異步下載等其他操作)

Microsoft .NET Framework 2.0新增加了3個類使我們很方便的對文件傳輸協議(FTP)服務器進行操作
FtpWebRequest類:實現文件傳輸協議(FTP)客戶端
public sealed class FtpWebRequest : WebRequest

FtpWebResponse類:封裝文件傳輸協議(FTP)服務器對請求的響應
public class FtpWebResponse : WebResponse, IDisposable

WebRequestMethods.Ftp類:表示可與FTP請求一起使用的FTP協議方法的類型,無法繼承此類
public static class Ftp

類關系圖

附件: FtpWebResponse_class.jpg


操作ftp的一般步驟我總結如下:
第一步:WebRequest.Create方法,獲得FtpWebRequest的實例
第二步:利用WebRequestMethods.Ftp設置FtpWebRequest的Method屬性,指定使用的FTP協議方法的類型
第三步:設置FtpWebRequest的Credentials屬性,指定用戶名和密碼
第四步:發出請求
第五步:接收響應數據流(有些ftp操作可能沒這一步,例如給文件夾改名)
第六步:關閉流



下面從幾段代碼來分別展示ftp的不同操作:
1.文件夾和文件信息
關鍵知識說明:
a.FtpWebRequest類沒有公開的構造函數,我們通過WebRequest.Create方法,獲得FtpWebRequest的實例
b.通過WebRequestMethods.Ftp.ListDirectoryDetails(詳細列表)或者WebRequestMethods.Ftp.ListDirectory(簡短列表)獲取FTP服務器上的文件列表
c.請求返回的數據在GetResponseStream方法返回的流中
d.字符編碼請用System.Text.Encoding.Default,要不中文名會亂碼
e.FtpWebRequest.Credentials屬性設置登陸用戶名和密碼
f.FtpWebRequest.UseBinary屬性,true,指示服務器要傳輸的是二進制數據.false,指示數據為文本。默認值為true
g.FtpWebRequest.EnableSsl屬性,如果控制和數據傳輸是加密的,則為true.否則為false.默認值為 false

實例代碼:
獲取ftp://218.16.229.120上的文件信息
  1. Uri uri = new Uri ( "ftp://218.16.229.120" );

  2. FtpWebRequest listRequest = ( FtpWebRequest ) WebRequest.Create ( uri );

  3. listRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
  4. //listRequest.Method = WebRequestMethods.Ftp.ListDirectory;

  5. string ftpUser = "";
  6. string ftpPassWord = "";
  7. listRequest.Credentials = new NetworkCredential ( ftpUser , ftpPassWord );

  8. FtpWebResponse listResponse = ( FtpWebResponse ) listRequest.GetResponse ( );
  9. Stream responseStream = listResponse.GetResponseStream ( );
  10. StreamReader readStream = new StreamReader ( responseStream , System.Text.Encoding.Default );

  11. if ( readStream != null )
  12. {
  13.     MessageBox.Show ( readStream.ReadToEnd ( )  );
  14. }

  15. MessageBox.Show ( string.Format ( "狀態: {0},{1}" ,listResponse.StatusCode,  listResponse.StatusDescription ) );

  16. listResponse.Close ( );
  17. responseStream.Close ( );
  18. readStream.Close ( );
復制代碼
通過WebRequestMethods.Ftp.ListDirectoryDetails(詳細列表)或者WebRequestMethods.Ftp.ListDirectory(簡短列表)返回的結果是不一樣的.請看圖
附件: FtpWebResponse_msg.jpg

利用WebRequestMethods.Ftp.ListDirectoryDetails,readStream.ReadToEnd ( )返回的字符串比較復雜(不同類型的Ftp會有不同返回形式的返回結果),要把里面的文件夾和文件區分列出來比較繁瑣,代碼比較多,所以我沒寫出來,感興趣的朋友可以留言,我可以郵件發送.



2.取ftp登陸身份驗證完成后的歡迎信息
關鍵知識說明:
a.FtpWebResponse.WelcomeMessage屬性獲取身份驗證完成時FTP服務器發送的消息

實例代碼:
獲取ftp://218.16.229.120登陸身份驗證完成后的歡迎信息
  1. Uri uri = new Uri ( "ftp://218.16.229.120" );

  2. FtpWebRequest listRequest = ( FtpWebRequest ) WebRequest.Create ( uri );

  3. listRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails;

  4. string ftpUser = "";
  5. string ftpPassWord = "";
  6. listRequest.Credentials = new NetworkCredential ( ftpUser , ftpPassWord );

  7. FtpWebResponse listResponse = ( FtpWebResponse ) listRequest.GetResponse ( );

  8. MessageBox.Show ( listResponse.WelcomeMessage );
復制代碼
附加說明:要是FTP服務器的歡迎信息帶有中文,運行這段代碼時可能會發生異常(基礎連接已經關閉: 服務器提交了協議).
解決辦法:打補丁Microsoft .NET Framework 2.0 Service Pack 1



3.重命名目錄
關鍵知識說明:
a.WebRequestMethods.Ftp.Rename表示重命名目錄的FTP協議方法
b.FtpWebRequest.RenameTo屬性重命名的新名稱

實例代碼:
ftp://218.16.229.120/上的a目錄重命名為av
  1. Uri uri = new Uri ( "ftp://218.16.229.120/a" );

  2. FtpWebRequest listRequest = ( FtpWebRequest ) WebRequest.Create ( uri );

  3. listRequest.Method = WebRequestMethods.Ftp.Rename;

  4. string ftpUser = "";
  5. string ftpPassWord = "";
  6. listRequest.Credentials = new NetworkCredential ( ftpUser , ftpPassWord );

  7. listRequest.RenameTo = "av";

  8. FtpWebResponse listResponse = ( FtpWebResponse ) listRequest.GetResponse ( );

  9. MessageBox.Show ( listResponse.StatusDescription );

主站蜘蛛池模板: 67pao强力打造国产免费| 日本一区免费电影| 国产色欲AV一区二区三区| 伊人久久精品无码麻豆一区| 亚洲中文字幕在线无码一区二区| 97精品视频在线观看| 浮力影院国产第一页| 无码人妻精品一区二区三区蜜桃| 国产免费一区二区三区在线观看| 亚洲永久中文字幕在线| 中文字幕黑人借宿神宫寺| 制服丝袜一区在线| 欧美日韩国产在线观看| 女人l8毛片a一级毛片| 国产免费人成视频在线观看| 久久精品国产网红主播| 国产成人精品视频播放| 又粗又大又爽又紧免费视频| 中文字幕亚洲综合久久| 免费黄色福利视频| 日韩视频在线观看| 在线日韩av永久免费观看| 亚洲精品成人网站在线播放| 上原亚衣一区二区在线观看| 麻豆精品传媒一二三区在线视频| 日韩不卡手机视频在线观看| 国产精品亚洲综合天堂夜夜| 亚洲精品乱码久久久久久按摩 | 亚洲国产理论片在线播放| 亚洲五月激情网| 日韩三级一区二区| 四虎影视永久费观看在线| 一区二区三区四区视频在线| 自慰系列无码专区| 日本黄色片在线播放| 国产91在线九色| 久久久国产精品一区二区18禁| 老师您的兔子好软水好多动漫视频| 小泽玛利亚国产在线视频| 国产一区二区精品久久| 久久久久久久久久国产精品免费|