2010-02-01 33 views
8

Estoy usando System.IO.Directory.Delete y trato de eliminar carpetas del sistema como 'My Music', 'My Videos', etc. errores similares a "Acceso a la ruta del sistema 'C: \ users \ jbloggs \ Saved Games' denegado". Sin embargo, puedo eliminar estas carpetas a través del Explorador sin ningún problema, tengo permisos completos para estas carpetas. ¿Alguna sugerencia sobre lo que puedo probar?"Acceso a la ruta del sistema denegado" cuando se usa 'System.IO.Directory.Delete'

Mi código:

public static void ClearAttributes(string currentDir) 
{ 
    if (Directory.Exists(currentDir)) 
    { 
     string[] subDirs = Directory.GetDirectories(currentDir); 
     foreach (string dir in subDirs) 
      ClearAttributes(dir); 
     string[] files = files = Directory.GetFiles(currentDir); 
     foreach (string file in files) 
      File.SetAttributes(file, FileAttributes.Normal); 
    } 
} 

Uso:

try 
{ 
    ClearAttributes(FolderPath); 
    System.IO.Directory.Delete("C:\\users\\jbloggs\\Saved Games", true); 
} 
catch (IOException ex) 
{ 
    MessageBox.Show(ex.Message); 
} 
+1

No hay coincidencias relevantes de Google con la cadena exacta "Acceso a la ruta del sistema". ¿Es esta la redacción exacta del mensaje de error? –

+0

Intenta citar tu cadena de ruta. Use @ "C: \ users \ jbloggs \ Saved Games". También, muestra 'ex.ToString()'. Finalmente, esto está relacionado con .NET, no con el lenguaje de programación C#. –

+0

Los atributos no son siempre el problema. Otra causa es que alguna aplicación tiene ese directorio o algo debajo de él abierto. En mi caso, ¡la aplicación era Windows Explorer! Tenía el directorio relevante bloqueado, a pesar de que la carpeta "actual" estaba fuera de la que estaba intentando cambiar el nombre. Mi aplicación no pudo cambiar el nombre del directorio hasta que cerré Explorer. –

Respuesta

14

Sí, esa carpeta tiene el "Solo lectura" atributo. Esto funcionaría:

var dir = new DirectoryInfo(@"c:\temp\test"); 
dir.Attributes = dir.Attributes & ~FileAttributes.ReadOnly; 
dir.Delete(); 

Siempre debe prestar atención a los atributos del archivo cuando elimina cosas. Asegúrese de mantenerse alejado de todo lo que sea System o ReparsePoint. Y cuidado con ReadOnly y Hidden.

+0

Impresionante, muchas gracias nobugz! –

+0

esto no funcionó para mí en VB.NET :( –

+0

Esto funcionará prácticamente todo el tiempo, mientras que eliminar RO no siempre funciona: http://stackoverflow.com/a/648055/3543437 –

Cuestiones relacionadas