关于Directory.Delete的MSDN文档错误?

时间:2013-11-26 14:01:37

标签: c# msdn

在System.IO.Directory.Delete(string,bool)(here)的MSDN文档中,当“路径引用文件而不是目录”时,它会抛出DirectoryNotFoundException。 。

但是,以下测试失败,因为抛出了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,上面的内容为了说明而缩短)。我的测试是强制此错误还是文档不正确?

2 个答案:

答案 0 :(得分:2)

我认为文档是正确的,但有一个技巧 当您调用DeleteDirectory传递现有文件时,抛出的第一个异常是

  

IOException ......由path指定的具有相同名称和位置的文件   存在。

你可以用

证明这一点
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 :(得分:0)

您尝试删除的文件不是目录,并且抛出了io异常,因为“存在路径指定的具有相同名称和位置的文件”。这是ioexception列出的原因之一