網路編程–ftp用戶端的實現(c#版)

來源:互聯網
上載者:User
.net2.0對ftp有了一個很好的封裝,但是確容易讓人忽略ftp的真正內部實現,下面是我實現的ftp用戶端的功能,其主要步驟是這樣的:
1、建立一個FtpWebRequest對象,指向ftp伺服器的uri
  2、設定ftp的執行方法(上傳,下載等)
  3、給FtpWebRequest對象設定屬性(是否支援ssl,是否使用二進位傳輸等)
  4、設定登入驗證(使用者名稱,密碼)
  5、執行請求
  6、接收相應流(如果需要的話)
  7、如果沒有開啟的流,則關閉ftp請求
  
  開發任何ftp應用程式都需要一個相關的ftp伺服器及它的配置資訊。FtpWebRequest暴露了一些屬性來設定這些資訊。
首先是串連然後取出ftp中所有的目錄和檔案清單顯示  Cursor currentCursor = this.Cursor;
            FtpWebResponse respons = null;
            Stream stream = null;
            try
            {
                this.Cursor = Cursors.WaitCursor;
                FtpWebRequest request = (FtpWebRequest)WebRequest.Create(textBox1.Text);
                request.Credentials = new NetworkCredential(textName.Text, textPwd.Text);
                request.Method = WebRequestMethods.Ftp.ListDirectory;
                respons = (FtpWebResponse)request.GetResponse();
                stream = respons.GetResponseStream();
                FillDirectoryList(stream);
                serverDirecftory = null;

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "error Ftp Client", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }
            finally
            {
                if (respons != null)
                    respons.Close();
                if (stream != null)
                    stream.Close();
                this.Cursor = currentCursor;
            }

        }

開啟一個目錄: FtpWebResponse response = null;
            Stream stream = null;
            try
            {
                string subDir = listBox1.SelectedValue.ToString().Trim();
                serverDirecftory += "/" + subDir;
                Uri baseUri = new Uri(textBox1.Text);
                Uri uri = new Uri(baseUri, serverDirecftory);
                FtpWebRequest request = (FtpWebRequest)WebRequest.Create(uri);
                request.Credentials = new NetworkCredential(textName.Text, textPwd.Text);
                request.Method = WebRequestMethods.Ftp.ListDirectory;
                response = (FtpWebResponse)request.GetResponse(); stream = response.GetResponseStream();
                FillDirectoryList(stream);
                //serverDirecftory = null;

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "error Ftp Client", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }
            finally
            {
                if (response != null)
                    response.Close();
                if (stream != null)
                    stream.Close();
            }

上傳功能private void Upload(string filename) 
  { 
   FileInfo fileInf = new FileInfo(filename); 
   string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name; 
   FtpWebRequest reqFTP; 
   
   // 根據uri建立FtpWebRequest對象 
   reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileInf.Name)); 
   
   // ftp使用者名稱和密碼 
   reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword); 
   
   // 預設為true,串連不會被關閉 
   // 在一個命令之後被執行 
   reqFTP.KeepAlive = false; 
   
   // 指定執行什麼命令 
   reqFTP.Method = WebRequestMethods.Ftp.UploadFile; 
   
   // 指定資料轉送類型 
   reqFTP.UseBinary = true; 
   
   // 上傳檔案時通知伺服器檔案的大小 
   reqFTP.ContentLength = fileInf.Length; 
   
   // 緩衝大小設定為2kb 
   int buffLength = 2048; 
   
   byte[] buff = new byte[buffLength]; 
   int contentLen; 
   
   // 開啟一個檔案流 (System.IO.FileStream) 去讀上傳的檔案 
   FileStream fs = fileInf.OpenRead(); 
   try 
   { 
   // 把上傳的檔案寫入流 
   Stream strm = reqFTP.GetRequestStream(); 
   
   // 每次讀檔案流的2kb 
   contentLen = fs.Read(buff, 0, buffLength); 
   
   // 流內容沒有結束 
   while (contentLen != 0) 
   { 
   // 把內容從file stream 寫入 upload stream 
   strm.Write(buff, 0, contentLen); 
   
   contentLen = fs.Read(buff, 0, buffLength); 
   } 
   
   // 關閉兩個流 
   strm.Close(); 
   fs.Close(); 
   } 
   catch (Exception ex) 
   { 
   MessageBox.Show(ex.Message, "Upload Error"); 
   } 
  } 

寫到這可能有些明白了,我們發現不管是顯示,上傳還是轉到下級,他們的方法都是一致的即我們開頭說的幾步,重點是設定當前的路徑所在,我在這了用了一個全域變數string serverDirecftory來儲存,當時根目錄的我們就設定為NULL,當目錄由變化時我們改變其值就行了,如下一個目錄中  serverDirecftory += "/" + subDir;同時設定要執行的命令這是關鍵:
 request.Method = WebRequestMethods.Ftp.ListDirectory(Rename,Delete,GetFileSize,FileListDetails,MakeDir);這樣 我們就可以實現ftp用戶端的整個功能了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.