DirectoryInfo
読み取り専用のファイルとフォルダーがあるため、取得しようとするとエラーが発生します。
どうすればそれらをスキップできますか?
var dirinfo = new DirectoryInfo(Path_Tb_Path.Text);
var entries = dirinfo.GetFileSystemInfos("**", SearchOption.AllDirectories);
DirectoryInfo
読み取り専用のファイルとフォルダーがあるため、取得しようとするとエラーが発生します。
どうすればそれらをスキップできますか?
var dirinfo = new DirectoryInfo(Path_Tb_Path.Text);
var entries = dirinfo.GetFileSystemInfos("**", SearchOption.AllDirectories);
.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();