您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“C#如何解決連接FTP時的路徑問題”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“C#如何解決連接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; }
以上是“C#如何解決連接FTP時的路徑問題”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。