0

DirectoryInfo読み取り専用のファイルとフォルダーがあるため、取得しようとするとエラーが発生します。

どうすればそれらをスキップできますか?

var dirinfo = new DirectoryInfo(Path_Tb_Path.Text);
var entries = dirinfo.GetFileSystemInfos("**", SearchOption.AllDirectories);
4

1 に答える 1

1

.NET 4.0 では、メソッドを使用できましたEnumerateFileSystemInfos。たとえば、UnauthorizedAccessExceptionいくつかのファイルを飲み込み、アクセス権があるファイルのみを結果に含める次の再帰的メソッドを作成できます。

public static IEnumerable<FileSystemInfo> SafeGetFileSystemInfosRecursive(DirectoryInfo directory, string searchPattern)
{
    try
    {
        return directory
            .EnumerateFileSystemInfos(searchPattern)
            .Concat(
                directory
                    .EnumerateDirectories()
                    .SelectMany(x => SafeGetFileSystemInfosRecursive(x, searchPattern))
            );
    }
    catch (UnauthorizedAccessException)
    {
        return Enumerable.Empty<FileSystemInfo>();
    }
}

そして、次のようにメソッドを呼び出します。

var dirInfo = new DirectoryInfo(Path_Tb_Path.Text);
FileSystemInfo[] entries = SafeGetFileSystemInfosRecursive(dirInfo, "**").ToArray();
于 2013-03-02T22:01:37.650 に答える