FTP檔名包含特殊符號「#」,造成FtpWebRequest出現Exception,顯示的是FTP 550檔案不存在或沒有權限,特殊符號處理過後即正常。
使用Uri.HexEscape()
,將「#」轉換為十六進制表示的ASCII碼,才是可辨別的uri。Uri.HexEscape(CChar("#"))
會被轉換成%23
。
其他會造成錯誤的特殊符號可能還有「%」、「+」...。
'Handle speceial character in ftp uri to avoid error
Private Function uri_HandleSpecialChar(ByVal str_FtpAddress As String) As Uri
If str_FtpAddress.Contains("#") Then
str_FtpAddress = str_FtpAddress.Replace("#", Uri.HexEscape(CChar("#")))
End If
If str_FtpAddress.Contains("%") Then
str_FtpAddress = str_FtpAddress.Replace("%", Uri.HexEscape(CChar("%")))
End If
If str_FtpAddress.Contains("+") Then
str_FtpAddress = str_FtpAddress.Replace("+", Uri.HexEscape(CChar("+")))
End If
Return New Uri(str_FtpAddress)
End Function