2010-02-25 7 views

Respuesta

8

Debe usar el espacio de nombre Security.

Ver this SO answer.

De las respuestas:

FileIOPermission writePermission = new FileIOPermission(FileIOPermissionAccess.Write, filename); 
if(!SecurityManager.IsGranted(writePermission)) 
{ 
    //No permission. 
    //Either throw an exception so this can be handled by a calling function 
    //or inform the user that they do not have permission to write to the folder and return. 
} 

Actualización: (siguientes comentarios)

FileIOPermission trata de las políticas de seguridad no sistema de archivos permisos, por lo que es necesario utilizar DirectoryInfo.GetAccessControl.

+0

He intentado lo siguiente: Dim readPermission Como Nueva FileIOPermission (FileIOPermissionAccess.Read, "C: \ Users \ Admin \ documentos \ Mis imágenes") El intento de acceso al directorio anterior produce "Acceso denegado", pero "SecurityManager .IsGranted (readPermission) "siempre devuelve verdadero. – SharpAffair

+0

De http://msdn.microsoft.com/en-us/library/system.security.securitymanager.isgranted.aspx: 'La concesión de permisos está determinada por la política y es diferente de una demanda sujeta a anulaciones, como una afirmación . Además, IsGranted solo prueba la concesión del ensamblaje de código de llamada, independientemente de otras personas que llaman en la pila. – Oded

+6

Esa no es la respuesta correcta. FileIOPermission trata con CAS, no con el sistema de archivos. En otras palabras, si la política de seguridad .NET permite el acceso. Puede tener acceso CAS pero Windows aún puede negarlo. DirectoryInfo.GetAccessControl() es necesario. –

9

Simplemente no puedes. No hay forma de verificar si un directorio es accesible, todo lo que puede determinar es que fue accesible. La razón por la cual es tan pronto como se completa el cheque, los permisos pueden cambiar e invalidar su cheque. La estrategia más confiable que puede implementar es acceder a los directorios y tomar el UnauthorizedAccessException.

escribí un artículo en el blog sobre este tema recientemente, lo que va en un poco de detalle

-1

que sólo podría hacer un poco de función booleana simple y tener una información de directorio variables intento para obtener directorios de una ruta determinada. si se procesa sin problemas, devuelve true, si la excepción es handle, return false, o desglosa tu cláusula de excepción en excepciones secundarias y obtienes el código de error.

Cuestiones relacionadas