删除远程文件?

时间:2011-03-17 09:39:22

标签: c#

我有要删除的文件。连接可以来自文件共享,http和ftp。

要删除的文件示例:

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

这就是我的所作所为:

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

我得到的错误是:

  

不支持给定的路径格式

是否有一个代码可以在所有这些文件类型中删除?

我为此任务创建了一个简单的代码(基于线程响应) 这是输入:

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

这是代码:

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;
    }
}

FtpFile已成功删除。 WebRequestMethods.Http不包含DeleteFile。

所以我的问题是,如何从此URI中删除文件?

http://tabletijam/FileServer/upload.bin

5 个答案:

答案 0 :(得分:16)

因为FileInfo仅适用于本地文件。对于每个连接,您将需要一个特殊的实现。

对于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 :(得分:2)

使用\\server...表示法,您可以删除远程服务器上的文件(您有权访问)。

使用FTP,您应该FtpWebRequest

对于HTTP,您可以使用HttpWebRequest发出DELETE请求。

对于FTP和HTTP,您可能需要提供用户名和密码。通常,HTTP服务器也没有配置为在默认情况下接收DELETE请求时删除文件。

答案 2 :(得分:1)

由于很多原因,不,没有一种统一的方法可以通过这些协议删除文件。

你可以将它抽象为你自己的一些实现,但是,使用一个特定于你想要支持的每个协议的实现......

答案 3 :(得分:1)

  

如何从此uri中删除文件?

request.Method =“DELETE”;

此外,WebDAV支持different header来控制删除...

答案 4 :(得分:-1)

不,这是不可能的。 FTP和HTTP是您需要坚持的协议。即使您在资源管理器中查看FTP文件夹时可能能够删除文件并不意味着它也适用于C#,因为Explorer使用集成的FTP客户端。像这样通过HTTP删除文件根本不可能。