No se puede eliminar mediante programación SVN copia de trabajo
Pregunta
Estoy utilizando el href="http://sharpsvn.open.collab.net/" rel="nofollow noreferrer"> SharpSvn biblioteca en una aplicación. Como parte de mis pruebas de integración automatizadas, se crea un repositorio de pruebas, echa un vistazo a una copia de trabajo, realice algunas pruebas, y luego eliminar tanto las carpetas de copia del repositorio y de trabajo.
Sin embargo, un Directory.Delete(workingCopyPath, true);
sencilla siempre produce un UnauthorizedAccessException
con el mensaje " acceso a la ruta 'entradas' denegado. ". Puedo reproducir el error con este código:
using (var svnClient = new SvnClient())
{
svnClient.CheckOut(
new SvnUriTarget(new Uri(repositoryPath)), workingCopyPath);
}
Directory.Delete(workingCopyPath, true);
Este error se sigue produciendo si
- tratar de eliminar una copia de trabajo creado por un anterior Ejecutar de la integración pruebas
-
Thread.Sleep
unos segundos antes tratando de eliminar
Si utilizo el explorador para eliminar manualmente la copia de trabajo temporal, que no reciben ningún error.
¿Qué va mal aquí? ¿Cuál es la forma correcta de eliminar mediante programación una copia de trabajo local?
Solución
resulta Directory.Delete
se niega a borrar archivos de sólo lectura.
Ahora utilice este método para directorios Borrar:
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);
}
}