Ne peut pas supprimer programatically copie de travail SVN
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?
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);
}
}