c 實現ftp功能

2022-01-14 07:53:02 字數 2641 閱讀 6935

介紹

微軟的.net framework

2.0相對於1.x來說增加了對ftp的支援。以前為了符合我的需求,我不等不使用第三方類庫來實現ftp功能,但是為了可靠,還是使用.net

2.0下實現ftp的簡單**,使用的語言是c#。或許是因為這是.net新增的類,又或許是第三方類庫已經能很好的實現你的需求,.net

2.0的這部分類庫並沒有得到足夠的關注。

背景

首先設定乙個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錯誤

·傳送請求到ftp伺服器需要呼叫getresponse方法。當請求的操作完成後,乙個ftpwebresponse物件將返回。這個

了ftp伺服器返回的最後的狀態**。ftpwebresponse物件的statusdescription屬性為這個狀態**的描述。

**:

c 實現ftp功能

背景 作為我的工作的一部分,我已經使用了ftp模組,但是我只能在.net 1.1中去使用它,所以我不能深入的研究.net 2.0下ftp的實現。但是我相信,ne 2.0下對ftp的支援是非常好的。不要忘記引入命名空間 using system.net using system.io 下面的幾個步驟包...

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 ...