2011-03-17 86 views
9

我有要刪除的文件。連接可以來自文件共享,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 
+0

你不能直接請求這樣的FileInfo的。您需要對放置文件的位置進行實際的請求。無論是與Web或FTP請求。然後你可以得到fileinfo並刪除文件。 – Rob 2011-03-17 09:42:54

回答

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

對於一大堆的理由,沒有,沒有,你可以通過每個協議刪除文件一個統一的方式。

你可以抽象送人到一些自己的執行,然而,使用具體到每個要支持的協議的執行...

-1

不,這是不可能的。 FTP和HTTP是您必須遵守的協議。即使您在查看瀏覽器中的FTP文件夾時也可以刪除文件,但這並不意味着它可以從C#工作,因爲Explorer使用集成的FTP客戶端。通過HTTP來刪除文件是完全不可能的。

+0

我的答案因爲... *而被低估了* – 2013-04-25 12:21:54

+0

他問了三個問題:「(你怎麼樣)刪除遠程文件?」,「是否有一個代碼可以在所有這些文件類型中刪除?」以及「如何從這個URI刪除(a)文件? 。他們是對這些問題的解決方案(儘管第二個問題更多的是他的邏輯錯誤),沒有人應該回答「不,這是不可能的」。另外你最後關於用HTTP刪除的說法也是不可能的,這也是錯誤的。通過HTTP可以刪除。 – 2015-07-27 17:52:11

+0

@BrennenSprimont,我的答案和其他人說的是一樣的,它是正確的 - 所以我沒有看到真正降低評分的理由。 – 2015-07-27 18:16:31

2

使用\\server...符號,你可以刪除文件(您可以訪問)在遠程服務器上。

使用FTP,你應該FtpWebRequest

對於HTTP,您可以使用HttpWebRequest發出DELETE請求。

對於FTP和HTTP,您可能都需要提供用戶名和密碼。通常,HTTP服務器在缺省情況下收到DELETE請求時未配置爲刪除文件。

1

如何從此uri中刪除文件?

request.Method =「DELETE」;

此外,還有一個different header通過WebDAV的控制刪除支持...