我正在使用SharpSvn应用程序中的库。作为自动化集成测试的一部分,我创建一个测试存储库, checkout 工作副本,执行一些测试,然后删除存储库和工作副本文件夹。
但是,一个简单的 Directory.Delete(workingCopyPath, true);
总是会产生 UnauthorizedAccessException
,并显示消息“访问路径‘entries’被拒绝.”。我可以使用以下代码重现错误:
using (var svnClient = new SvnClient())
{
svnClient.CheckOut(
new SvnUriTarget(new Uri(repositoryPath)), workingCopyPath);
}
Directory.Delete(workingCopyPath, true);
如果我这样做,仍然会出现此错误
- 尝试删除创建的工作副本 通过之前运行集成 测试
Thread.Sleep
几秒前 尝试删除
如果我使用资源管理器手动删除临时工作副本,我不会收到任何错误。
这里出了什么问题?以编程方式删除 Subversion 工作副本的正确方法是什么?
最佳答案
结果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);
}
}
关于svn - 无法以编程方式删除 SVN 工作副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1982209/