10 Stimmen

Entfernte Dateien löschen?

Ich habe Dateien, die ich löschen möchte. Die Verbindung kann über Dateifreigabe, http und ftp erfolgen.

Beispiel für zu löschende Dateien:

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

Ich habe Folgendes getan:

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

Der Fehler, den ich erhalte, lautet:

Das angegebene Pfadformat wird nicht unterstützt

Gibt es einen einzigen Code, der in all diesen Dateitypen löschen kann?

Ich habe einen einfachen Code für diese Aufgabe erstellt (basierend auf der Antwort des Threads).
Dies ist die Eingabe:

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");

Dies ist der Code:

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 erfolgreich gelöscht. WebRequestMethods.Http enthält nicht DeleteFile.

Meine Frage ist also, wie lösche ich eine Datei aus dieser URI?

http://tabletijam/FileServer/upload.bin

16voto

RvdK Punkte 19035

Denn FileInfo funktioniert nur mit lokalen Dateien. Für jede Verbindung benötigen Sie eine spezielle Implementierung.

Für FTP: (Beispiel aus 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;
}

2voto

GvS Punkte 51365

Die Verwendung des \\server... Notation können Sie Dateien (auf die Sie Zugriff haben) auf entfernten Servern löschen.

Wenn Sie FTP verwenden, sollten Sie die FtpWebRequest .

Für HTTP könnten Sie eine DELETE-Anfrage stellen, indem Sie HttpWebRequest .

Sowohl für FTP als auch für HTTP müssen Sie möglicherweise einen Benutzernamen und ein Passwort angeben. Außerdem sind HTTP-Server normalerweise nicht so konfiguriert, dass sie Dateien löschen, wenn sie eine DELETE-Anfrage erhalten.

1voto

tomfanning Punkte 9432

Aus einer ganzen Reihe von Gründen gibt es keine einheitliche Methode, mit der Sie Dateien über jedes dieser Protokolle löschen können.

Sie könnten dies jedoch in eine eigene Implementierung abstrahieren, indem Sie für jedes der Protokolle, die Sie unterstützen wollen, eine eigene Implementierung verwenden...

1voto

George Tsiokos Punkte 1760

Wie lösche ich eine Datei von dieser Uri?

request.Method = "DELETE";

Außerdem gibt es eine andere Überschrift unterstützt von WebDAV zur Kontrolle des Löschens...

-1voto

Thorsten Dittmar Punkte 54284

Nein, das ist nicht möglich. FTP und HTTP sind Protokolle, an die Sie sich halten müssen. Auch wenn Sie in der Lage sind, Dateien zu löschen, wenn Sie FTP-Ordner im Explorer anzeigen, bedeutet das nicht, dass dies auch in C# funktioniert, da der Explorer einen integrierten FTP-Client verwendet. Das Löschen von Dateien über HTTP ist auf diese Weise nicht möglich.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X