2009-08-04 21 views
3

私が書いているアプリケーションでは、ユーザーはいくつかのファイルを再帰的に検索するためにフォルダを追加する機能を持っています。Directory.GetFilesを使用した場合のUnauthorizedAccessException

問題は、彼がアプリケーションに追加したいファイルがK:のようなベースドライブに保存されている可能性があるということです。このドライブを直接追加すると、例外が発生します。

それとも彼がC追加した場合:パスに

アクセス「C:\のシステムボリューム情報が」拒否された\を、私はそれが言うUnauthorizedAccessExceptionを取得します。

どのようにスキャンするだけでスキャンできますか?そして、別の非システムドライブを完全に(すべてのディレクトリ)スキャンする機能を与えますか?

答えて

5

例外をキャッチして無視し、次のディレクトリに移動します。

+0

、これが最も可能性が高い、それを処理する前に、すべての単一のディレクトリのアクセス権限をチェックするよりもパフォーマンスが向上します。 – bernhof

+0

@Bernhof:私は同じように感じます。私はパーミッションをチェックする代替方法を考えましたが、それは有効なディレクトリ(一度チェックして、再度フォルダ構造を解析するために)を2回実行するので、それはあまりオプションではないと判断しました。 –

+0

ありがとう、私はシステム以外のベースドライブを検索したときの例外も試してみます。それは別の例外でした。 –

1

これはなぜ私にとってはうまくいかないのですか?私はunauthorizedAccessExceptionをキャッチしようとしていますが、まだプログラムを停止しています。

+0

(サブディレクトリで再帰的にスキャンする)1回の呼び出しでそれを実行しようとすると、関数はunauthorizedAccessExceptionを発生させると停止します。ですから、問題を避けるために、ディレクトリ/サブディレクトリとDirectory.GetFiles(上の変数に返された結果を連結)内の呼び出しをループして再試行する必要があります。 – VSP

関連する問題