在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,上面的内容为了说明而缩短)。我的测试是强制此错误还是文档不正确?
答案 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列出的原因之一