背景
作為我的工作的一部分,我已經使用了ftp模組,但是我只能在.net 1.1中去使用它,所以我不能深入的研究.net 2.0下ftp的實現。但是我相信,.ne 2.0下對ftp的支援是非常好的。
**
不要忘記引入命名空間
using system.net;
using system.io;
下面的幾個步驟包括了使用ftpwebrequest類實現ftp功能的一般過程
1、建立乙個ftpwebrequest物件,指向ftp伺服器的uri
3、給ftpwebrequest物件設定屬性(是否支援ssl,是否使用二進位制傳輸等)
4、設定登入驗證(使用者名稱,密碼)
5、執行請求
6、接收相應流(如果需要的話)
7、如果沒有開啟的流,則關閉ftp請求
開發任何ftp應用程式都需要乙個相關的ftp伺服器及它的配置資訊。ftpwebrequest暴露了一些屬性來設定這些資訊。
接下來的**示例了上傳功能
首先設定乙個uri位址,包括路徑和檔名。這個uri被使用在ftpwebrequest例項中。
然後根據ftp請求設定ftpwebrequest物件的屬性
其中一些重要的屬性如下:
·credentials - 指定登入ftp伺服器的使用者名稱和密碼。
·keepalive - 指定連線是應該關閉還是在請求完成之後關閉,預設為true
·usebinary - 指定檔案傳輸的型別。有兩種檔案傳輸模式,一種是binary,另一種是ascii。兩種方法在傳輸時,位元組的第8位是不同的。ascii使用第8位作為錯誤控制,而binary的8位都是有意義的。所以當你使用ascii傳輸時要小心一些。簡單的說,如果能用記事本讀和寫的檔案用ascii傳輸就是安全的,而其他的則必須使用binary模式。當然使用binary模式傳送ascii檔案也是非常好的。
·usepassive - 指定使用主動模式還是被動模式。早先所有客戶端都使用主動模式,而且工作的很好,而現在因為客戶端防火牆的存在,將會關閉一些埠,這樣主動模式將會失敗。在這種情況下就要使用被動模式,但是一些埠也可能被伺服器的防火牆封掉。不過因為ftp伺服器需要它的ftp服務連線到一定數量的客戶端,所以他們總是支援被動模式的。這就是我們為什麼要使用被動模式的原意,為了確保資料可以正確的傳輸,使用被動模式要明顯優於主動模式。(譯者注:主動(port)模式建立資料傳輸通道是由伺服器端發起的,伺服器使用20埠連線客戶端的某乙個大於1024的埠;在被動(pasv)模式中,資料傳輸的通道的建立是由ftp客戶端發起的,他使用乙個大於1024的埠連線伺服器的1024以上的某乙個埠)
·contentlength - 設定這個屬性對於ftp伺服器是有用的,但是客戶端不使用它,因為ftpwebrequest忽略這個屬性,所以在這種情況下,該屬性是無效的。但是如果我們設定了這個屬性,ftp伺服器將會提前預知檔案的大小(在upload時會有這種情況)
·method - 指定當前請求是什麼命令(upload,download,filelist等)。這個值定義在結構體webrequestmethods.ftp中。
private void upload(string filename)
// 關閉兩個流
strm.close();
fs.close();
} catch (exception ex) }
以上**簡單的示例了ftp的上傳功能。建立乙個指向某ftp伺服器的ftpwebrequest物件,然後設定其不同的屬性credentials,keepalive,method,usebinary,contentlength。
開啟本地機器上的檔案,把其內容寫入ftp請求流。緩衝的大小為2kb,無論上傳大檔案還是小檔案,這都是乙個合適的大小。
private void download(string filepath, string filename)
ftpstream.close();
outputstream.close();
response.close();
} catch (exception ex) }
上面的**示例了如何從ftp伺服器上獲得檔案列表。uri指向ftp伺服器的位址。我們使用streamreader物件來儲存乙個流,檔名稱列表通過「/r/n」分隔開,也就是說每乙個檔名稱都佔一行。你可以使用streamreader物件的readtoend() 方法來得到檔案列表。上面的**中我們用乙個stringbuilder物件來儲存檔名稱,然後把結果通過分隔符分開後作為乙個陣列返回。我確定只是乙個比較好的方法。
其他的實現如rename,delete,getfilesize,filelistdetails,makedir等與上面的幾段**類似,就不多說了。
注意:實現重新命名的功能時,要把新的名字設定給ftpwebrequest物件的renameto屬性。連線指定目錄的時候,需要在ftpwebrequest物件所使用的uri中指明。
需要注意的地方
你在編碼時需要注意以下幾點:
·除非enablessl屬性被設定成true,否作所有資料,包括你的使用者名稱和密碼都將明文發給伺服器,任何監視網路的人都可以獲取到你連線伺服器的驗證資訊。如果你連線的ftp伺服器提供了ssl,你就應當把enablessl屬性設定為true。
·如果你沒有訪問ftp伺服器的許可權,將會丟擲securityexception錯誤
c 實現ftp功能
介紹 微軟的.net framework 2.0相對於1.x來說增加了對ftp的支援。以前為了符合我的需求,我不等不使用第三方類庫來實現ftp功能,但是為了可靠,還是使用.net 2.0下實現ftp的簡單 使用的語言是c 或許是因為這是.net新增的類,又或許是第三方類庫已經能很好的實現你的需求,n...
C 實現FTP上傳檔案
文末有獲取完整原始碼的路徑鏈結,在我的上傳資源裡也有完整 各位可不聽我巴拉巴拉,直接獲取 調優,嘿嘿。除錯過程中有問題,再看著我的博文,望能幫助到您。也願幫助到以後的我自己,那樣的話,我會很開心感激現在的自己。ftp位址 string ftpsvrip 10.192.xx ftp埠 int port...
如何實現自動ftp上傳功能 expect
為了實現高度自動化的系統資源監控,且實現對監控到資料異常時日誌檔案的上傳 ftp 實現了如下指令碼 指令碼名稱 autofileupload usr local bin expect set file lindex argv 0 set date lindex argv 1 set timeout ...