Kann nicht programmatisch SVN Arbeitskopie löschen
Frage
Ich bin mit der SharpSvn Bibliothek in einer Anwendung. Im Rahmen meiner automatisierten Integrationstests, erstelle ich eine Test-Repository, checken Sie eine Arbeitskopie, einige Tests durchführen und sowohl das Repository dann löschen und Arbeitskopie Ordner.
Allerdings ist eine einfache Directory.Delete(workingCopyPath, true);
ergibt immer eine UnauthorizedAccessException
mit der Meldung „ Zugriff auf den Pfad‚Einträge‘verweigert. “. Ich kann den Fehler mit diesem Code reproduzieren:
using (var svnClient = new SvnClient())
{
svnClient.CheckOut(
new SvnUriTarget(new Uri(repositoryPath)), workingCopyPath);
}
Directory.Delete(workingCopyPath, true);
Dieser Fehler tritt immer noch, wenn ich
- versuchen, eine Arbeitskopie löschen erstellt durch ein zurück der Integration laufen Tests
-
Thread.Sleep
einige Sekunden vor versuchen, löschen
Wenn ich Explorer verwenden, um manuell die temporäre Arbeitskopie zu löschen, ich bekomme keine Fehler.
Was ist hier falsch geht? Was ist der richtige Weg, um programmatisch eine Subversion-Arbeitskopie löschen?
Lösung
Turns out Directory.Delete
verweigert schreibgeschützte Dateien löschen.
ich jetzt diese Methode zu löschen Verzeichnisse verwenden:
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);
}
}