2010-02-25 7 views

risposta

8

È 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.

+0

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

+0

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

+6

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. –

9

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

-1

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.

Problemi correlati