Не удается программно удалить рабочую копию SVN

StackOverflow https://stackoverflow.com/questions/1982209

  •  22-09-2019
  •  | 
  •  

Вопрос

Я использую 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);
   }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top