题
我用的 SharpSvn 库应用程序。作为我的一部分自动化测试的集成,我创建了一个试验的储存库,检查了一个工作复制,执行一些试验,然后删除这两个储存库和工作复制文件夹。
然而,一个简单的 Directory.Delete(workingCopyPath, true);
总是会产生一个 UnauthorizedAccessException
有消息"访问的道路'条'是拒绝。".我可以重现的错误,这个代号:
using (var svnClient = new SvnClient())
{
svnClient.CheckOut(
new SvnUriTarget(new Uri(repositoryPath)), workingCopyPath);
}
Directory.Delete(workingCopyPath, true);
这个错误仍然发生,如果我
- 试图删除的工作创造了复制 通过一个 以前的 运行的一体化 测试
Thread.Sleep
几秒钟之前 试图删除
如果我使用浏览器以手动删除临时工作拷贝,我没有得到任何错误。
什么是错误在这里?什么是适当的方式通过程序删除的颠复工作的副本?
解决方案
事实证明 Directory.Delete
拒绝删除只读文件。
我现在使用此方法可以删除目录:
private void DeleteDirectory(string path)
{
var directory = new DirectoryInfo(path);
DisableReadOnly(directory);
directory.Delete(true);
}
private void DisableReadOnly(DirectoryInfo directory)
{
foreach (var file in directory.GetFiles())
{
if (file.IsReadOnly)
file.IsReadOnly = false;
}
foreach (var subdirectory in directory.GetDirectories())
{
DisableReadOnly(subdirectory);
}
}
不隶属于 StackOverflow