我在应用程序中使用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
试图删除如果我使用资源管理器手动删除临时工作副本,我不会收到任何错误。
这里出了什么问题?以编程方式删除subversion工作副本的正确方法是什么?
答案 0 :(得分:7)
结果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);
}
}