2009-07-08 9 views
4

J'ai créé un produit logiciel, qui fonctionne comme Apache mod_rewrite, mais pour .NET. L'une des exigences est de prendre en charge la commande RewriteLog qui définit un chemin pour la journalisation. Cela fonctionne très bien, mais le plus gros problème auquel je suis confronté est que les utilisateurs définissent un chemin auquel l'utilisateur IIS n'a pas accès.Déterminer si un fichier a un accès en écriture dans .NET

Je voudrais lancer une exception à l'utilisateur sur le manque d'accès en écriture, en vérifiant les permissions du chemin pour s'assurer que l'accès en écriture est disponible.

J'ai déjà compris que je peux essayer d'écrire un fichier sur le disque dur pour tester. Mais cela semble hacky et je voudrais trouver une façon non-hacky de le faire? Quelqu'un sait-il de certaines API que je peux appeler c'est Medium-Trust en toute sécurité pour vérifier les autorisations de fichiers pour l'accès en écriture?

Répondre

2

On dirait que ce que vous cherchez est la classe FileIOPermission (dans System.Security.Permissions), qui vous permet de vérifier si vous avez des permissions avant de continuer ... cela dit, vous continuez de détecter que vous ne ont des autorisations en attrapant une exception; et vous devriez toujours attendre la possibilité d'une exception pendant l'opération d'écriture proprement dite.

using System.Security.Permissions; 
... 
public void CheckForWriteRights(string path) 
{ 
    FileIOPermission permission = new FileIOPermission(FileIOPermissionAccess.Write, path); 
    try 
    { 
     permission.Demand(); 
     // the application does have Write rights to the path 
    } 
    catch 
    { 
     // the application doesn't have rights to the path 
    } 
} 
+0

fyi: vous devriez aussi jeter un oeil à FileIOPermissionAttribute (et aux classes permission et allowattribute en général). Il existe deux méthodes de vérification des autorisations, déclarative et impérative. Pour votre exemple spécifique, l'approche déclarative (en utilisant un attribut sur la classe) n'est généralement pas la meilleure option, car elle nécessite un chemin absolu à compiler - cependant l'espace de noms Permissions est un aspect important du framework .NET que vous devriez être conscient de et avoir au moins une compréhension de base de – STW

+0

Merci pour l'aide, votre solution initiale est ce dont j'avais besoin. J'ai fini par aller avec une protection d'une ligne de: FileIOPermission nouveau (FileIOPermissionAccess.Write, chemin) .Demand(); Sans l'essayer/attraper. Mais votre solution m'a conduit à cette réponse –

+0

Qu'en est-il du cas où vous vous ajoutez à un fichier journal existant, mais un autre programme l'a déjà ouvert. Votre extrait ci-dessus passera, mais un programme échouera en essayant d'ouvrir le fichier pour l'ajouter. –

Questions connexes