C#串連FTP時路徑出現問題的解決方案

來源:互聯網
上載者:User
最近在工作中遇到一個需求,需要利用C#串連FTP,在串連過程中遇到一個問題,所以下面這篇文章主要給大家介紹了關於C#串連FTP時路徑問題的解決方案,需要的朋友可以參考借鑒,下面來一起看看吧。

前言

本文主要給大家介紹了關於C#串連FTP時路徑問題的相關內容,分享出來供大家參考學習,話不多說,來一起看看詳細的介紹:

今天在開發項目時,需要串連FTP擷取檔案,其中關鍵的一步就是判斷能否串連FTP以及FTP上的檔案是否存在

判斷的代碼如下:


/// <summary>  /// 測試是否可以成功串連FTP和判斷檔案是否存在  /// </summary>  /// <param name="ftpServerFilePath">FTP上檔案地址</param>  /// <param name="ftpUserId">FTP登陸使用者名稱</param>  /// <param name="ftpPwd">FTP登陸密碼</param>  /// <param name="errorMsg">返回錯誤訊息</param>  /// <returns></returns>  private bool IsCanConnectFtp(string ftpServerFilePath, string ftpUserId, string ftpPwd, out string errorMsg)  {   bool flag = true;   FtpWebResponse ftpResponse = null;   FtpWebRequest ftpRequest = null;   errorMsg = string.Empty;   try   {    ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerFilePath));    ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory;    ftpRequest.Timeout = 2 * 1000;//逾時時間設定為2秒。    ftpRequest.Credentials = new NetworkCredential(ftpUserId, ftpPwd);    ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();   }   catch (WebException exception)   {    ftpResponse = (FtpWebResponse)exception.Response;    switch (ftpResponse.StatusCode)    {     case FtpStatusCode.ActionNotTakenFileUnavailable:      errorMsg = "下載的檔案不存在";      break;     case FtpStatusCode.ActionNotTakenFileUnavailableOrBusy:      errorMsg = "下載的檔案正在使用,請稍後再試";      break;     default:      errorMsg = "發生未知錯誤";      break;    }    flag = false;   }   catch   {    errorMsg = "網路連接發生錯誤,請稍後再試";    flag = true;   }   finally   {    if (ftpResponse != null)    {     ftpResponse.Close();    }   }   return flag;  }

當 ftpServerFilePath 的路徑為 “127.0.0.1\1.doc”, 這樣進行傳參時,就會拋異常,異常內容為無效的URi,如

解決方案

這是因為FtpWebRequest.Create 串連時不能識別'\' 這樣的檔案路徑標識符,才會拋出上面的異常,因此傳入的參數應該為”127.0.0.1/1.doc”。或者在方法裡面進行替換。代碼如下所示:


 ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerFilePath.Replace("\\","/")));

這樣就不會跑異常,至於能否串連或者檔案是否存在,請自行查看串連

https://msdn.microsoft.com/zh-cn/library/system.net.ftpstatuscode(v=vs.110).aspx

或者自行 google FtpStatusCode 即可。

那麼修改後的代碼為:(關於C# 串連完整的FTP 可以仔細 google 查詢,網上多的是,這樣就不累述了)


 /// <summary>  /// 測試是否可以成功串連FTP和判斷檔案是否存在  /// </summary>  /// <param name="ftpServerFilePath">FTP上檔案地址</param>  /// <param name="ftpUserId">FTP登陸使用者名稱</param>  /// <param name="ftpPwd">FTP登陸密碼</param>  /// <param name="errorMsg">返回錯誤訊息</param>  /// <returns></returns>  private bool IsCanConnectFtp(string ftpServerFilePath, string ftpUserId, string ftpPwd, out string errorMsg)  {   bool flag = true;   FtpWebResponse ftpResponse = null;   FtpWebRequest ftpRequest = null;   errorMsg = string.Empty;   try   {    ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerFilePath.Replace("\\","/")));    ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory;    ftpRequest.Timeout = 2 * 1000;//逾時時間設定為2秒。    ftpRequest.Credentials = new NetworkCredential(ftpUserId, ftpPwd);    ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();   }   catch (WebException exception)   {    ftpResponse = (FtpWebResponse)exception.Response;    switch (ftpResponse.StatusCode)    {     case FtpStatusCode.ActionNotTakenFileUnavailable:      errorMsg = "下載的檔案不存在";      break;     case FtpStatusCode.ActionNotTakenFileUnavailableOrBusy:      errorMsg = "下載的檔案正在使用,請稍後再試";      break;     default:      errorMsg = "發生未知錯誤";      break;    }    flag = false;   }   catch   {    errorMsg = "網路連接發生錯誤,請稍後再試";    flag = true;   }   finally   {    if (ftpResponse != null)    {     ftpResponse.Close();    }   }   return flag;  }

總結

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.