How to check if an FTP directory exists

前端 未结 10 1344
一个人的身影
一个人的身影 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 10:59

    User this code it may be your answer..

     public bool FtpDirectoryExists(string directoryPath, string ftpUser, string ftpPassword)
            {
                bool IsExists = true;
                try
                {
                    FtpWebRequest request = (FtpWebRequest)WebRequest.Create(directoryPath);
                    request.Credentials = new NetworkCredential(ftpUser, ftpPassword);
                    request.Method = WebRequestMethods.Ftp.PrintWorkingDirectory;
    
                    FtpWebResponse response = (FtpWebResponse)request.GetResponse();
                }
                catch (WebException ex)
                {
                    IsExists = false;
                }
                return IsExists;
            }
    

    I have called this method as:

    bool result =    FtpActions.Default.FtpDirectoryExists( @"ftp://mydomain.com/abcdir", txtUsername.Text, txtPassword.Text);
    

    Why use another library - create your own logic's.

    0 讨论(0)
  • 2020-12-01 10:59

    Navigate to the parent directory, execute the "ls" command, and parse the result.

    0 讨论(0)
  • 2020-12-01 11:01

    I assume that you are already somewhat familiar with FtpWebRequest, as this is the usual way to access FTP in .NET.

    You can attempt to list the directory and check for an error StatusCode.

    try 
    {  
        FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://ftp.microsoft.com/12345");  
        request.Method = WebRequestMethods.Ftp.ListDirectory;  
        using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())  
        {  
            // Okay.  
        }  
    }  
    catch (WebException ex)  
    {  
        if (ex.Response != null)  
        {  
            FtpWebResponse response = (FtpWebResponse)ex.Response;  
            if (response.StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable)  
            {  
                // Directory not found.  
            }  
        }  
    } 
    
    0 讨论(0)
  • 2020-12-01 11:04

    I couldn't get this @BillyLogans suggestion to work....

    I found the problem was the default FTP directory was /home/usr/fred

    When I used:

    String directory = "ftp://some.domain.com/mydirectory"
    FtpWebRequest requestDir = (FtpWebRequest)FtpWebRequest.Create(new Uri(directory));
    

    I found this gets turned into

    "ftp:/some.domain.com/home/usr/fred/mydirectory"
    

    to stop this change the directory Uri to:

    String directory = "ftp://some.domain.com//mydirectory"
    

    Then this starts working.

    0 讨论(0)
  • 2020-12-01 11:05

    Basically trapped the error that i receive when creating the directory like so.

    private bool CreateFTPDirectory(string directory) {
    
        try
        {
            //create the directory
            FtpWebRequest requestDir = (FtpWebRequest)FtpWebRequest.Create(new Uri(directory));
            requestDir.Method = WebRequestMethods.Ftp.MakeDirectory;
            requestDir.Credentials = new NetworkCredential("username", "password");
            requestDir.UsePassive = true;
            requestDir.UseBinary = true;
            requestDir.KeepAlive = false;
            FtpWebResponse response = (FtpWebResponse)requestDir.GetResponse();
            Stream ftpStream = response.GetResponseStream();
    
            ftpStream.Close();
            response.Close();
    
            return true;
        }
        catch (WebException ex)
        {
            FtpWebResponse response = (FtpWebResponse)ex.Response;
            if (response.StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable)
            {
                response.Close();
                return true;
            }
            else
            {
                response.Close();
                return false;
            }  
        }
    }
    
    0 讨论(0)
  • 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

    0 讨论(0)
提交回复
热议问题