考虑以下计划:
var path = Path.Combine(
Path.GetTempPath(),
Path.GetFileNameWithoutExtension(Path.GetRandomFileName()));
Directory.CreateDirectory(path);
var testFile = Path.Combine(path, "test.txt");
File.WriteAllText(testFile, "Test file");
var source = Repository.Init(path);
using (var repository = new Repository(source))
{
repository.Index.Add("test.txt");
}
Directory.Delete(path, true);
删除存储库文件夹后,我得到UnauthorizedAccessException
- 拒绝访问其中一个内部git文件。为了删除文件夹,还有什么我应该处理的吗?
答案 0 :(得分:8)
为了删除文件夹,还有什么我应该处理的吗?
你的处理模式很好。上述问题的起源不同。
正如 documentation 中所述,当出现与权限相关的问题时会引发UnauthorizedAccessException
。
事实上,Libgit2Sharp的行为类似于git,并将.git/objects
层次结构下的文件标记为只读,因此在尝试删除它们时会抛出异常。
为了解决这个问题,并在运行测试时简化清理阶段,我们开发了一个辅助方法(即DirectoryHelper.DeleteDirectory()
),它以递归方式取消设置这些只读属性并删除文件和目录。
请参阅 source code ,您是否愿意重复使用它。