我在尝试获取DirectoryInfo
时收到错误,因为有一些只读文件和文件夹。
如何跳过它们?
var dirinfo = new DirectoryInfo(Path_Tb_Path.Text);
var entries = dirinfo.GetFileSystemInfos("**", SearchOption.AllDirectories);
答案 0 :(得分: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();