0

こんにちは、ディレクトリとファイルを数えるソフトウェアを使用しています..

ここで、ファイルを取得または検索すると、C:\またはD:\スローされますUnAuthorizedAccessException

アクセスできないファイル/ディレクトリを無視してファイルを列挙したい

方法 ??C# Visual Studio 2008 正確には .NET Framework 3.5 のみ。

私のコード

var files = FastDirectoryEnumerator.EnumerateFiles(path, "*.reg.zip", 
                 SearchOption.AllDirectories)
                .GroupBy(f => f.Name).Select(g => g.First());

ここでは、で終わるファイルを取得しています.reg.zip

コンピューター全体で検索したい..しかし、例外..

VS 2008のデフォルトユーザー..試しapp.manifestてみました

    <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

しかし、例外..SystemVolumeInformationディレクトリでの検索中..

4

1 に答える 1

0

これは最善のアドバイスではないと言って始めましょう。ただし、開始する場所です。私の答えは 2 つあります。

FastDirectoryEnumeratorまず、プロジェクトで直面するファイリング システム レベルのセキュリティの問題を理解する前に、 を使用して時期尚早に最適化したと思います。そのため、時間が許せば、コメントで @phillip がリンクしている投稿で推奨されている、より単純なソリューションをお勧めします (ファイルを取得している間に UnauthorizedAccessException )。リモートで最新のマシンの場合、120k ファイルは問題になりません。

第二に、の速度統計をFastDirectoryEnumerator見ると、それを使用する魅力がわかります。コードを少し掘り下げてみると、これまでのように使用しても、アクセス許可の例外から保護されないことがわかります。これは基本的に、IEnumerable MoveNext メソッド内にラップされた手続き型コードです。MoveNext メソッド自体は、サブディレクトリの処理のために再帰的に行われています。

この次のビットをテストすることはできないため、実験する必要があります。最初にハックしたい場合は、新しい FileData オブジェクトの作成に関するブロックFastDirectoryEnumeratorを試してみてください。try catch

public FileData Current { get { return new FileData(m_path, m_win_find_data); } }

それが機能しない場合は、GetNext()メソッドを使用して適切な場所で例外をトラップする必要があります。のNullObjectパターンを実装するところまで行く必要があるかもしれませんFileData。それが何らかの形で役立つことを願っています。

于 2013-08-13T20:27:02.307 に答える