Не удается программно удалить рабочую копию SVN
Вопрос
Я использую SharpSvn ( Острый сигнал ) библиотека в приложении.В рамках моих автоматизированных интеграционных тестов я создаю тестовый репозиторий, извлекаю рабочую копию, выполняю некоторые тесты, а затем удаляю папки repository и working copy.
Однако простой 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?
Решение
Оказывается 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);
}
}