如何在.txt文件的所有驱动器中搜索所有目录?

我使用此代码搜索所有驱动器中的所有目录以搜索所有.txt文件:

public List Search() { var files = new List(); foreach (DriveInfo d in DriveInfo.GetDrives().Where(x => x.IsReady == true)) { files.AddRange(Directory.GetFiles(d.RootDirectory.FullName, "*.txt", SearchOption.AllDirectories)); } return files; } 

但在运行中我遇到此错误: 在此处输入图像描述

如何解决它?

谢谢。

这只是一个权限问题。 使用try / catch块。 磁盘上的某些文件夹(包括RecycleBin文件夹)无法访问非特权代码。

 public List Search() { var files = new List(); foreach (DriveInfo d in DriveInfo.GetDrives().Where(x => x.IsReady)) { try { files.AddRange(Directory.GetFiles(d.RootDirectory.FullName, "*.txt", SearchOption.AllDirectories)); } catch(Exception e) { Logger.Log(e.Message); // Log it and move on } } return files; } 

另请注意,使用带有AllDirectories选项的Directory.GetFiles有一个固有的问题,如果整个驱动器中的任何文件夹都无法访问,它将失败,因此您不会在结果中获得该驱动器的任何文件。 解决方案是进行手动递归。 在这个SO问题中可以找到这种方法的一个很好的例子。

这里的问题是你无法控制某些文件来访问它的文件。 所以你需要使用try{ } catch{ } 。 但我认为你在处理整个文件系统目录时无法处理这个问题。 因此,您需要首先获取所有目录的列表,然后在处理特定目录文件时立即处理每个目录,您可以处理这种exception。

请检查一下:

unauthorizedaccessexception,无法排解,目录的GetFiles故障