【问题标题】:MSDN documentation wrong about Directory.Delete?关于 Directory.Delete 的 MSDN 文档错误?
【发布时间】:2013-11-26 14:01:36
【问题描述】:

在 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,以上为说明用的缩写)。我的强制这个错误的测试是错误的还是文档不正确?

【问题讨论】:

  • 此处无法重现。抛出 IOException
  • 这就是我要说的。 IOException 被抛出,但 DirectoryNotFoundException 是预期的。

标签: c# msdn


【解决方案1】:

我认为文档是对的,但是有一个技巧。
当您调用 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

【讨论】:

  • 是的,就是这样。仍然令人困惑的行为。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多