2011-03-17 19 views
9

Tengo archivos que deseo eliminar. La conexión puede ser de intercambio de archivos, http y ftp.¿Eliminar archivos remotos?

Ejemplo de archivos para borrar:

//mytest//delete//filename.bin 
ftp://mytest/delete/filename.bin 
http://mytest/delete/filename.bin 

Aquí es lo que hice:

Uri target = new Uri(@"ftp://mytest/delete/filename.bin"); 
FileInfo fi = new FileInfo(target.AbsoluteUri); 
fi.Delete(); 

El error que consigo es:

El formato caminos dada no es compatible

¿Hay algún código que pueda eliminarse en todos estos tipos de archivos?

He creado un código simple para esta tarea (basado en la respuesta del hilo).
Esta es la entrada:

Uri target = new Uri(@"ftp://tabletijam/FileServer/upload.bin"); 
Uri target = new Uri(@"http://tabletijam/FileServer/upload.bin"); 
Uri target = new Uri(@"\\tabletijam\FileServer\upload.bin"); 

Este es el código:

bool DeleteFileOnServer(Uri serverUri) 
{ 
    if (serverUri.Scheme == Uri.UriSchemeFtp) 
    { 
     FtpWebRequest request = (FtpWebRequest)WebRequest.Create(serverUri); 
     request.Method = WebRequestMethods.Ftp.DeleteFile; 

     FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 
     lblStatus.Content = response.StatusDescription; 

     response.Close(); 

     return true; 
    } 
    else if (serverUri.Scheme == Uri.UriSchemeFile) 
    { 
     System.IO.File.Delete(serverUri.LocalPath); 

     return true; 
    } 
    else if (serverUri.Scheme == Uri.UriSchemeHttp || serverUri.Scheme == Uri.UriSchemeHttps) 
    { 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(serverUri); 
     request.Method = WebRequestMethods.Http.DeleteFile; 

     HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
     lblStatus.Content = response.StatusDescription; 

     response.Close(); 

     return true; 
    } 
    else 
    { 
     lblStatus.Content = "Unknown uri scheme."; 
     return false; 
    } 
} 

Ftp y File eliminó con éxito. WebRequestMethods.Http no contiene DeleteFile.

Entonces mi pregunta es, ¿cómo elimino el archivo de este URI?

http://tabletijam/FileServer/upload.bin 
+0

no puede solicitar directamente la fileinfo como este. Debe realizar una solicitud real a la ubicación donde se colocaron sus archivos. Ya sea con una solicitud web o ftp. Luego puede obtener el archivo info y eliminar los archivos. – Rob

Respuesta

16

Porque FileInfo solo funciona con archivos locales. Para cada conexión, necesitará una implementación especial.

para FTP: (example from MSDN)

public static bool DeleteFileOnServer(Uri serverUri) 
{ 
    // The serverUri parameter should use the ftp:// scheme. 
    // It contains the name of the server file that is to be deleted. 
    // Example: ftp://contoso.com/someFile.txt. 
    // 

    if (serverUri.Scheme != Uri.UriSchemeFtp) 
    { 
     return false; 
    } 
    // Get the object used to communicate with the server. 
    FtpWebRequest request = (FtpWebRequest)WebRequest.Create(serverUri); 
    request.Method = WebRequestMethods.Ftp.DeleteFile; 

    FtpWebResponse response = (FtpWebResponse) request.GetResponse(); 
    Console.WriteLine("Delete status: {0}",response.StatusDescription); 
    response.Close(); 
    return true; 
} 
1

Para una gran cantidad de razones, no, no hay una sola manera unificada puede eliminar archivos a través de cada uno de estos protocolos.

Usted podría abstracta esta distancia en alguna implementación de su propia cuenta, sin embargo, el uso de una aplicación específica para cada uno de los protocolos que desea apoyar ...

-1

No, esto no es posible. FTP y HTTP son protocolos que debe cumplir. Aunque es posible que pueda eliminar archivos al visualizar carpetas FTP en el Explorador, esto no significa que también funciona desde C#, porque el Explorer usa un cliente FTP integrado. Eliminar archivos a través de HTTP así no es posible en absoluto.

+0

Y mi respuesta fue downvoted * porque ... *? –

+0

Hizo tres preguntas: "(cómo lo hace) Eliminar archivos remotos?", "¿Hay un código único que se puede eliminar en todos estos tipos de archivos?" Y "¿cómo elimino (a) un archivo de este URI?" . Son soluciones para cada una de estas preguntas (aunque la segunda pregunta es más un error lógico de su parte) y ninguna debe responderse con "No, esto no es posible". Además, su última declaración sobre la eliminación con HTTP es imposible también es incorrecta. Eliminar es posible a través de HTTP. –

+0

@BrennenSprimont Bueno, mi respuesta dice lo mismo que los demás y es correcta, así que no veo una razón para rechazar realmente. –

2

Al utilizar la notación \\server..., puede eliminar el archivo (que tiene acceso) en los servidores remotos.

Utilizando FTP, debe el FtpWebRequest.

Para HTTP, puede emitir una solicitud DELETE, usando HttpWebRequest.

Para FTP y HTTP, es posible que deba proporcionar un nombre de usuario y una contraseña. También normalmente los servidores HTTP no están configurados para eliminar archivos cuando reciben una solicitud DELETE por defecto.

1

¿cómo elimino el archivo de este uri?

request.Method = "DELETE";

Además, hay un different header apoyo de WebDAV para controlar el borrado ...

Cuestiones relacionadas