2017-10-12 20 views
2

MSDNによれば、ディレクトリにアクセスできない場合、Directory.Existsはfalseを返す必要があります。私はDirectory.Existsがtrueを返すパスを持っていますが、Directory.GetFilesはSystem.UnauthorizedAccessExceptionをスローします。私もCanRead関数hereを試しましたが、これもパスに対してtrueを返します。このフォルダでUnauthorizedAccessExceptionが表示されるのはなぜですか?

パスは "C:\ Users \ {username} \ AppData \ Local \ Microsoft \ Windows \ INetCache \ Content.IE5"です。

+1

興味深いのは、INetCacheではなく「一時的なインターネットファイル」 – BugFinder

+1

です。あなたはそのドキュメントを誤解しています。 'Directory.Exists'は、ディレクトリがアクセス可能かどうかをチェックするのではなく、" pathが既存のディレクトリを参照する場合はtrue、ディレクトリが存在しない場合はfalse、または指定されたディレクトリが存在するかどうかを判断しようとするとエラーが発生しますディレクトリが存在します。 – Claies

+0

[許可なしの場所からファイルを追加しようとするとUnauthorizedAccessExceptionを処理する方法]の複製があります(https://stackoverflow.com/questions/13954630/how-to-handle-unauthorizedaccessexception-when-attempting-to-add-files- from-loca) – Sinatr

答えて

2

このフォルダの内容にはアクセスできません。最初は実際にはフォルダではなく、reparse pointという別のフォルダをターゲットとしています.2番目のアクセス権はかなり制限されています。

この再解析ポイントは、自由にアクセスできる「C:\ Users \ {username} \ AppData \ Local \ Microsoft \ Windows \ INetCache \ IE」フォルダを対象としています。

レガシーソフトウェアとの互換性のために、ユーザーフォルダ内にいくつかのショートカットが存在します。また、これらの再解析ポイントの内容を一覧表示することはできませんが、名前を知っていれば、内部のファイルやフォルダにアクセスできます。

最後に、アクセスする前に特定のフォルダの権利を確認する必要はありません。代わりにUnauthorizedAccessExpceptionをキャッチし、それに応じて行動する必要があります。あなたはチェックの後に削除することができるので、アクセスの前にフォルダの存在をチェックする必要はありません(この特定のフォルダではありませんが、一般的にはDirectoryNotFoundExceptionをキャッチするだけです)。

関連する問題