无法以编程方式删除SVN工作副本

时间:2009-12-30 20:12:32

标签: svn sharpsvn

我在应用程序中使用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工作副本的正确方法是什么?

1 个答案:

答案 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);
   }
}