我用的 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);
   }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top