2017-10-12 4 views
2

Selon MSDN, Directory.Exists doit renvoyer false si un répertoire n'est pas accessible. J'ai un chemin pour lequel Directory.Exists renvoie vrai encore Directory.GetFiles lève une exception System.UnauthorizedAccessException. J'ai également essayé la fonction CanRead here, mais cela aussi retourne vrai pour le chemin.Pourquoi est-ce que j'obtiens UnauthorizedAccessException sur ce dossier?

Le chemin est "C: \ Utilisateurs \ {nom d'utilisateur} \ AppData \ Local \ Microsoft \ Windows \ INetCache \ Content.IE5" si vous savez que cela aide.

+1

mine intéressante n'est pas INetCache mais "fichiers Internet temporaires" – BugFinder

+1

vous avez mal lu la documentation. 'Directory.Exists' ne vérifie pas si le répertoire est accessible, à la place, il est:" true si le chemin fait référence à un répertoire existant, false si le répertoire n'existe pas ou une erreur survient en essayant de déterminer si le répertoire spécifié répertoire existe. " – Claies

+0

Copie possible de [Comment gérer UnauthorizedAccessException lorsque vous tentez d'ajouter des fichiers à partir d'un emplacement sans autorisations] (https://stackoverflow.com/questions/13954630/how-to-handle-unauthorizedaccessexception-when-attempting-to-add-files- from-loca) – Sinatr

Répondre

2

Vous n'avez pas accès au contenu de ce dossier, parce que d'abord - ce n'est pas un dossier, mais un reparse point qui cible un autre dossier et deuxièmement - il a des droits d'accès assez restrictifs. Dans votre cas particulier, ce point d'analyse cible le dossier "C: \ Users \ {nom d'utilisateur} \ AppData \ Local \ Microsoft \ Windows \ INetCache \ IE" qui est librement accessible.

Il existe plusieurs raccourcis de ce type dans le dossier utilisateur pour la compatibilité avec les anciens logiciels. Et bien que vous ne puissiez pas lister le contenu de ces points d'analyse, vous pouvez accéder aux fichiers et dossiers à l'intérieur lorsque vous connaissez le nom.

Et la dernière remarque, vous n'avez jamais besoin de vérifier les droits de dossier spécifiques avant l'accès, à la place, vous devriez attraper UnauthorizedAccessExpception et agir en conséquence. Vous n'avez même pas besoin de vérifier l'existence du dossier avant l'accès, car il peut être supprimé après vérification (pas ce dossier particulier, mais en général), vous devez simplement attraper DirectoryNotFoundException.