国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

關于C#連接FTP時路徑問題的解決方法

2020-01-24 00:33:52
字體:
來源:轉載
供稿:網友

前言

本文主要給大家介紹了關于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”?;蛘咴诜椒ɡ锩孢M行替換。代碼如下所示:

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

這樣就不會跑異常,至于能否連接或者文件是否存在,請自行查看連接

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("http://","/")));    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;  }

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對武林網的支持

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乐昌市| 宁都县| 礼泉县| 日土县| 饶阳县| 南郑县| 志丹县| 中方县| 广西| 六安市| 彭水| 家居| 纳雍县| 新河县| 和林格尔县| 博兴县| 青阳县| 依安县| 盐山县| 陆良县| 永登县| 常熟市| 堆龙德庆县| 若尔盖县| 诸城市| 沙雅县| 四平市| 会东县| 临潭县| 丰台区| 沙河市| 巨鹿县| 长子县| 普安县| 东台市| 大邑县| 罗城| 宣武区| 樟树市| 于都县| 乌兰浩特市|