How to check if an FTP directory exists

前端 未结 10 1405
一个人的身影
一个人的身影 2020-12-01 10:26

Looking for the best way to check for a given directory via FTP.

Currently i have the following code:

private bool FtpDirectoryExists(string direct         


        
10条回答
  •  难免孤独
    2020-12-01 11:06

    The only way which worked for me was an inversed logic by trying to create the directory/path (which will throw an exception if it already exists) and if so delete it again afterwards. Otherwise use the Exception to set a flag meaing that the directory/path exists. I'm quite new to VB.NET and I'm shure there's a nicer way to code this - but anyway here's my code:

            Public Function DirectoryExists(directory As String) As Boolean
            ' Reversed Logic to check if a Directory exists on FTP-Server by creating the Directory/Path
            ' which will throw an exception if the Directory already exists. Otherwise create and delete the Directory
    
            ' Adjust Paths
            Dim path As String
            If directory.Contains("/") Then
                path = AdjustDir(directory)     'ensure that path starts with a slash
            Else
                path = directory
            End If
    
            ' Set URI (formatted as ftp://host.xxx/path)
    
            Dim URI As String = Me.Hostname & path
    
            Dim response As FtpWebResponse
    
            Dim DirExists As Boolean = False
            Try
                Dim request As FtpWebRequest = DirectCast(WebRequest.Create(URI), FtpWebRequest)
                request.Credentials = Me.GetCredentials
                'Create Directory - if it exists WebException will be thrown
                request.Method = WebRequestMethods.Ftp.MakeDirectory
    
                'Delete Directory again - if above request did not throw an exception
                response = DirectCast(request.GetResponse(), FtpWebResponse)
                request = DirectCast(WebRequest.Create(URI), FtpWebRequest)
                request.Credentials = Me.GetCredentials
                request.Method = WebRequestMethods.Ftp.RemoveDirectory
                response = DirectCast(request.GetResponse(), FtpWebResponse)
                DirExists = False
    
            Catch ex As WebException
                DirExists = True
            End Try
            Return DirExists
    
        End Function
    

    WebRequestMethods.Ftp.MakeDirectory and WebRequestMethods.Ftp.RemoveDirectory are the Methods i used for this. All other solutions did not work for me.

    Hope it helps

提交回复
热议问题