Pergunta

Estou usando o Sharpsvn Biblioteca em um aplicativo. Como parte dos meus testes de integração automatizados, crio um repositório de teste, verifico uma cópia de trabalho, realizo alguns testes e excluo o repositório e as pastas de cópia de trabalho.

No entanto, um simples Directory.Delete(workingCopyPath, true); sempre produz um UnauthorizedAccessException com a mensagem "O acesso ao caminho 'entradas' é negado."Eu posso reproduzir o erro com este código:

     using (var svnClient = new SvnClient())
     {
        svnClient.CheckOut(
           new SvnUriTarget(new Uri(repositoryPath)), workingCopyPath);
     }
     Directory.Delete(workingCopyPath, true);

Este erro ainda ocorre se eu

  • tente excluir uma cópia de trabalho criada por um anterior execução dos testes de integração
  • Thread.Sleep alguns segundos antes de tentar excluir

Se eu usar o Explorer para excluir manualmente a cópia temporária de trabalho, não recebo nenhum erro.

o que há de errado aqui? Qual é a maneira correta de excluir programaticamente uma cópia de trabalho de subversão?

Foi útil?

Solução

Acontece Directory.Delete Recusa-se a excluir arquivos somente leitura.

Agora eu uso este método para excluir diretórios:

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);
   }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top