Impossibile eliminare programatically SVN copia di lavoro
Domanda
Sto usando il SharpSvn libreria in un'applicazione. Come parte del mio test di integrazione automatizzati, creo un repository di test, controlla una copia di lavoro, eseguire alcuni test, e quindi eliminare sia il repository e cartelle copia di lavoro.
Tuttavia, un semplice Directory.Delete(workingCopyPath, true);
produce sempre un UnauthorizedAccessException
con il messaggio " Accesso al percorso 'voci' è negato. ". Posso riprodurre l'errore con questo codice:
using (var svnClient = new SvnClient())
{
svnClient.CheckOut(
new SvnUriTarget(new Uri(repositoryPath)), workingCopyPath);
}
Directory.Delete(workingCopyPath, true);
Questo errore si verifica ancora se mi
- tenta di eliminare un copia di lavoro creato da un precedente Esegui dell'integrazione test
-
Thread.Sleep
alcuni secondi prima cercando di eliminare
Se io uso explorer per eliminare manualmente la copia di lavoro temporanea, non ottengo alcun errore.
Che cosa sta andando male qui? Qual è il modo corretto per eliminare programatically una copia di lavoro di eversione?
Soluzione
Risulta Directory.Delete
si rifiuta di cancellare i file di sola lettura.
ora uso questo metodo per eliminare le directory:
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);
}
}