Question

J'utilise le SharpSvn bibliothèque dans une application. Dans le cadre de mes tests d'intégration automatisés, je crée un référentiel de test, consultez une copie de travail, effectuer quelques tests, puis supprimer à la fois le référentiel et les dossiers de travail de copie.

Cependant, un simple Directory.Delete(workingCopyPath, true); donne toujours un UnauthorizedAccessException avec le message " L'accès au chemin 'entrées' est refusée. ". Je peux reproduire l'erreur avec ce code:

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

Cette erreur se produit encore si je

  • essayer de supprimer une copie de travail créé par un précédent run de l'intégration des tests
  • Thread.Sleep quelques secondes avant en essayant de supprimer

Si j'utilise l'explorateur pour supprimer manuellement la copie de travail temporaire, je ne reçois pas d'erreur.

Qu'est-ce qui ne va pas ici? Quelle est la bonne façon de supprimer programatically une copie de travail de subversion?

Était-ce utile?

La solution

Turns out Directory.Delete refuse de supprimer des fichiers en lecture seule.

Je vais maintenant utiliser cette méthode pour supprimer des répertoires:

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);
   }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top