我正在使用此代码搜索所有驱动器中的所有目录以搜索所有.txt文件:
public List<string> Search()
{
var files = new List<string>();
foreach (DriveInfo d in DriveInfo.GetDrives().Where(x => x.IsReady == true))
{
files.AddRange(Directory.GetFiles(d.RootDirectory.FullName, "*.txt", SearchOption.AllDirectories));
}
return files;
}
但在运行中我遇到此错误:
如何解决它?
谢谢。
答案 0 :(得分:7)
这只是一个权限问题。使用try / catch块。无特权代码无法访问磁盘上的某些文件夹(包括RecycleBin文件夹)。
public List<string> Search()
{
var files = new List<string>();
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;
}
另请注意,使用带有Directory.GetFiles
选项的AllDirectories
有一个固有的问题,如果整个驱动器中的任何文件夹都无法访问,它将会失败,因此您将无法获取任何文件推动你的结果。解决方案是进行手动递归。 this SO question中提供了该方法的一个很好的例子。
答案 1 :(得分:0)
这里的问题是你无法控制某些文件来访问它的文件。所以你需要使用try{ } catch{ }
。但我认为你在处理整个文件系统目录时无法处理这个问题。因此,您需要首先获取所有目录的列表,然后在处理特定目录文件时立即处理每个目录,您可以处理这种异常。
请检查一下:
unauthorizedaccessexception-cannot-resolve-directory-getfiles-failure