2009-12-30 85 views
2

我在应用程序中使用SharpSvn库。作为我的自动化集成测试的一部分,我创建了测试存储库,检出工作副本,执行一些测试,然后删除存储库和工作副本文件夹。无法以编程方式删除SVN工作副本

但是,一个简单的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

可能是你的集成自动化测试过程中的一个已经其当前目录设置为一个目录的工作副本中,或仍在使用拷贝一个文件。 – 2009-12-30 20:16:47

+0

不,这就是为什么我提到我也不能删除由* previous * run创建的工作副本。上一次运行的进程不再运行,所以我会说它不能保持任何资源锁定。 – 2009-12-30 20:19:32

回答

6

变为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); 
    } 
} 
+0

这种方式应该工作得很好耶。顺便说一句,你应该能够接受你自己的答案。 – 2010-01-01 21:03:54