Devo passare attraverso varie directory sul computer (tramite DirectoryInfo). Alcuni di questi non sono accessibili e si verifica UnauthorizedAccessException. Come posso controllare l'accesso alla directory senza catturare l'eccezione?.NET - Controllare se la directory è accessibile senza la gestione delle eccezioni
risposta
È necessario utilizzare lo spazio dei nomi Security
.
Vedere this SO risposta.
Dalle risposte:
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.
}
Aggiornamento: (seguenti osservazioni)
FileIOPermission
si occupa di politiche di sicurezza non filesystem permessi, quindi è necessario utilizzare DirectoryInfo.GetAccessControl
.
In poche parole non è possibile. Non c'è modo di verificare se una directory è accessibile, tutto quello che puoi determinare è che era accessibile. Il motivo per cui non appena il controllo completa le autorizzazioni può essere modificato e invalidato l'assegno. La strategia più affidabile che puoi implementare è accedere alle directory e prendere lo UnauthorizedAccessException
.
ho scritto un articolo del blog su questo argomento di recente, che va in un po 'di dettagli qui
si può solo fare un semplice po funzione booleana e hanno un informazioni directory prova variabile per ottenere directory da un determinato percorso. se procede senza problemi, restituisce true, se l'eccezione è gestita, restituisce false, oppure scompone la tua clausola di eccezione a sub-eccezioni e ottiene il codice di errore.
- 1. Come disattivare la gestione delle eccezioni?
- 2. Verificare se esiste un servizio su una particolare macchina senza utilizzare la gestione delle eccezioni
- 3. La gestione delle eccezioni Camel non funziona se la clausola delle eccezioni è definita in una classe separata
- 4. Come implementare la gestione delle eccezioni di primo livello?
- 5. Devo liberare/distruggere le eccezioni dopo la gestione delle eccezioni?
- 6. Come controllare rapidamente se la cartella è vuota (.NET)?
- 7. Python Gestione delle eccezioni
- 8. Utilizzo delle annotazioni per la gestione delle eccezioni?
- 9. Gestione delle eccezioni MVVM
- 10. Perché la gestione delle eccezioni da CloseHandle è diversa tra .NET 4 e 3.5?
- 11. Come disabilitare la gestione delle eccezioni di .NET Framework e utilizzare invece la mia?
- 12. Gestione delle eccezioni crittografiche
- 13. progettazione per la gestione delle eccezioni - motore di app google
- 14. Gestione delle eccezioni NHibernate
- 15. Gestione delle eccezioni WCF
- 16. BackgroundWorker gestione delle eccezioni
- 17. gestione delle eccezioni python
- 18. NSFileHandle writeData: gestione delle eccezioni
- 19. Controllare se la directory è vuota in Ruby
- 20. Controllare se la directory è un punto di montaggio?
- 21. Gestione delle eccezioni PostgreSQL
- 22. C++ gestione delle eccezioni
- 23. Controllare se è installata la versione completa di .net?
- 24. Buone pratiche per la gestione delle eccezioni Java
- 25. Lottando per capire la gestione delle eccezioni Xamarin
- 26. Python: Queue.Empty Gestione delle eccezioni
- 27. Gestione delle eccezioni dei nodi
- 28. Tipo inizializzatore (costruttore statico) gestione delle eccezioni
- 29. Gestione Spring-mvc e gestione delle eccezioni
- 30. Robusta gestione delle eccezioni Javascript
ho provato la seguente: Dim readPermission come nuovo FileIOPermission (FileIOPermissionAccess.Read, "C: \ Users \ Admin \ Documenti \ Immagini") Il tentativo di accesso alle directory sopra produce "Accesso negato", ma "SecurityManager .IsGranted (readPermission) "restituisce sempre true. – SharpAffair
Da http://msdn.microsoft.com/en-us/library/system.security.securitymanager.isgranted.aspx: 'La concessione delle autorizzazioni è determinata dalla politica ed è diversa dall'oggetto della richiesta di sovrascrivere, come ad esempio . Inoltre, IsGranted verifica solo la concessione dell'assembly del codice chiamante, indipendente da altri chiamanti nello stack. – Oded
Questa non è la risposta corretta. FileIOPermission si occupa di CAS, non del file system. In altre parole, se il criterio di sicurezza .NET consente l'accesso. È possibile avere l'accesso CAS ma Windows può ancora negarlo. DirectoryInfo.GetAccessControl() è necessario. –