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?

È stato utile?

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);
   }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top