列出FTP主路径的父目录

时间:2017-04-11 08:09:28

标签: .net vb.net url ftp uri

我必须列出FTP目录../Catalogue/

它在.NET 4.0中运行,但不再适用于.NET 4.5.2。

正如我所看到的,在.NET 4.5.2中,URI正在发生变化。 ../已被删除。

有没有人知道,如何将../保留在我的请求或替代解决方案中。

Dim request As FtpWebRequest =
    DirectCast(WebRequest.Create(
        New Uri("ftp://" + FTPServer + "/%2E%2E/Catalogue/")), FtpWebRequest)
request.Proxy = Nothing
request.UsePassive = True
request.UseBinary = True
request.KeepAlive = False
request.Credentials = New NetworkCredential("", "")
request.Method = WebRequestMethods.Ftp.ListDirectoryDetails
Dim response As WebResponse = request.GetResponse()

1 个答案:

答案 0 :(得分:0)

ftp://www.example.com/../Catalogue不是有效的网址,即imo。虽然它可能在过去的.NET版本中有效,但它不再令人惊讶。

您不应在网址中使用..。如果,它必须在一些实际路径之后,那么你可以随时随地返回。您的URL实际上看起来像是在尝试超越FTP根目录。那是不可能的。

但是从你模糊的评论中可以清楚地看出,你实际上是想从主路走上去(非chrooted)。

只需使用实际路径:ftp://www.example.com/something/Catalogue,其中something是您在屏幕截图中屏蔽的路径。

如果something由于某种原因而发生变化,您可以使用PrintWorkingDirectory方法找出它:

Dim pwdRequest As FtpWebRequest =
    DirectCast(WebRequest.Create(
        New Uri("ftp://" + FTPServer + "/")), FtpWebRequest)
pwdRequest.Method = WebRequestMethods.Ftp.PrintWorkingDirectory
Dim response As FtpWebResponse = pwdRequest.GetResponse()
Dim path As String = response.StatusDescription
Dim i As Integer = path.IndexOf("""")
If i > 0 Then
    path = path.Substring(i + 1)
    i = path.IndexOf("""")
    If i > 0 Then
        path = path.Substring(0, i)

        Dim request As FtpWebRequest =
            DirectCast(WebRequest.Create(
                New Uri("ftp://" + FTPServer + path + "../")), FtpWebRequest)

        ' Your code here
    End If
End If