Necesito ir a través de varios directorios en la computadora (a través de DirectoryInfo). Algunos de ellos no son accesibles y se produce la excepción de acceso no autorizado. ¿Cómo puedo verificar el acceso al directorio sin detectar la excepción?.NET - Verifique si se puede acceder al directorio sin excepción, manejando
Respuesta
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
.
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
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.
- 1. ¿Cómo determinar si se está manejando una excepción .NET?
- 2. Manejando una excepción nula C#
- 3. ¿Cómo hacer que Python verifique si el directorio ftp existe?
- 4. No se puede acceder al archivo - WebClient.DownloadFile
- 5. Verifique si se proporcionó la ruta completa
- 6. Mac Sandbox: prueba si se puede acceder a un archivo
- 7. Rieles: no se puede acceder al archivo de registro
- 8. .net bloqueos de aplicaciones inesperados sin excepción
- 9. Apache Commons FTPClient, verifique si existe un directorio remoto y obtenga permisos (linux - unix)
- 10. Verifique si la función se declara con el preprocesador C?
- 11. ¿Determina si el usuario puede acceder a la página solicitada?
- 12. ¿Verificar si se puede acceder al servidor a través de IPv6?
- 13. ¿Se puede acceder al parámetro de plantilla fuera de una plantilla sin un typedef?
- 14. ¿Se puede acceder al Sitio actual desde una plantilla?
- 15. ¿Se puede acceder al elemento oculto mediante javascript getElementByName?
- 16. Limitar a lo que puede acceder un complemento .net
- 17. . Servicios de directorio de .Net arroja una extraña excepción
- 18. Python: verifique si una palabra se deletrea correctamente
- 19. Verifique si una variable URL se establece mediante JQuery
- 20. Verifique si la actividad se inició en el Servicio
- 21. En .NET, verifique que el usuario actual pueda escribir en un directorio
- 22. ¿Cómo instalar OAuth si no puedo acceder al servidor?
- 23. ¿Puedo acceder al nombre del directorio virtual en global.asax.cs?
- 24. C# acceder al directorio activo con credenciales de usuario diferentes
- 25. Verifique si hay un enlace válido (URL)
- 26. C# .NET - cómo determinar si el directorio es grabable, con o sin UAC?
- 27. ¿Cómo acceder al elemento HTML sin ID?
- 28. Verifique la versión de .Net framework desde la aplicación WinForms
- 29. ¿Cómo puede Python acceder al portapapeles X11?
- 30. Manejando NSError al leer desde el archivo?
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
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
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. –