2013-11-26 40 views
1

在System.IO.Directory.Delete(string,bool)(here)的MSDN文檔中,它說DirectoryNotFoundException在「path指向文件而不是目錄」時拋出。有關Directory.Delete的MSDN文檔錯誤?

然而,由於拋出IOException以下測試失敗:

[Test] 
[ExpectedException(typeof(DirectoryNotFoundException))] // because DeleteDirectory fails on files. 
public void DeleteFileWithDeleteDirectoryDirectly() 
{ 
    var tempPath = Path.Combine(Path.GetTempPath(), "MyTestDirectory"); 
    Directory.CreateDirectory(tempPath); 
    string file = Path.Combine(tempPath, "File1235.txt"); 
    CreateDummyFile(file); 
    Assert.That(File.Exists(file)); 
    Directory.Delete(file, true); 
} 

void CreateDummyFile(string name) 
{ 
    FileStream fs = File.Open(name, FileMode.Create, FileAccess.Write, FileShare.ReadWrite); 
    fs.WriteByte(255); 
    fs.Close(); 
} 

(TEMPPATH在實際的代碼每次測試後刪除,上述被縮短用於說明)。我的測試是強制這個錯誤是錯誤的還是文檔不正確?

+0

此處不能複製。拋出IOException異常 –

+0

這就是我所說的。 IOException被拋出,但DirectoryNotFoundException是預期的。 – PMF

回答

2

我認爲文檔是正確的,但有一個技巧。
當你調用DeleteDirectory傳遞一個存在的文件拋出的第一個例外是

IOException異常......與路徑 存在指定的同一名稱和位置的文件。

您可以

var tempFile = Path.Combine(Path.GetTempPath(), "MyTestDirectory", "inexistentfile.txt"); 
var tempPath = Path.Combine(Path.GetTempPath(), "MyTestDirectory"); 
Directory.CreateDirectory(tempPath); 
string file = Path.Combine(tempPath, "File1235.txt"); 
CreateDummyFile(file); 
if(File.Exists(file)) Console.WriteLine("File exists"); 
Directory.Delete(tempFile, true); 

證明這一點現在,如果你試圖通過一個不存在預期異常DirectoryNotFoundException拋出一個文件名。

+1

是的,就是這樣。混亂的行爲仍然存在。 – PMF

0

您試圖刪除的文件不是目錄,因爲「存在具有由路徑指定的相同名稱和位置的文件,所以會拋出io異常。哪一個是iofxception列出的原因之一