Saltar al contenido

Cómo verificar si existe un directorio FTP

Recabamos por todo el mundo online para de este modo traerte la respuesta a tu dilema, en caso de alguna difcultad puedes dejarnos tu pregunta y responderemos porque estamos para ayudarte.

Solución:

Básicamente atrapé el error que recibo al crear el directorio así.

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;
          
    

Yo también estaba atrapado con un problema similar. yo estaba usando,

FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://ftpserver.com/rootdir/test_if_exist_directory");  
request.Method = WebRequestMethods.Ftp.ListDirectory;  
FtpWebResponse response = (FtpWebResponse)request.GetResponse();

y esperó una excepción en caso de que el directorio no existiera. Este método no lanzó una excepción.

Después de algunos intentos, cambié el directorio de: “ftp://ftpserver.com/rootdir/test_if_exist_directory” a: “ftp://ftpserver.com/rootdir/test_if_exist_directory/”. Ahora el código está funcionando para mí.

Creo que deberíamos agregar una barra diagonal (/) al URI de la carpeta ftp para que funcione.

Según lo solicitado, la solución completa ahora será:

public bool DoesFtpDirectoryExist(string dirPath)

    try
    
        FtpWebRequest request = (FtpWebRequest)WebRequest.Create(dirPath);  
        request.Method = WebRequestMethods.Ftp.ListDirectory;  
        FtpWebResponse response = (FtpWebResponse)request.GetResponse();
        return true;
     
     catch(WebException ex)
     
         return false;
     


//Calling the method (note the forwardslash at the end of the path):
string ftpDirectory = "ftp://ftpserver.com/rootdir/test_if_exist_directory/";
bool dirExists = DoesFtpDirectoryExist(ftpDirectory);

Supongo que ya está algo familiarizado con FtpWebRequest, ya que esta es la forma habitual de acceder a FTP en .NET.

Puede intentar enumerar el directorio y buscar un código de estado de error.

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.  
          
      
 

Si te ha resultado útil este artículo, te agradeceríamos que lo compartas con el resto programadores y nos ayudes a dar difusión a este contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *