我正在使用此代码搜索所有驱动器中的所有目录以搜索所有.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;
}
Run Code Online (Sandbox Code Playgroud)
但在运行中我遇到了这个错误:

怎么解析呢?
谢谢.
这只是一个权限问题.使用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;
}
Run Code Online (Sandbox Code Playgroud)
另请注意,使用Directory.GetFileswith AllDirectories选项有一个固有的问题,如果整个驱动器中的任何文件夹都无法访问,它将失败,因此您不会在结果中获得该驱动器的任何文件.解决方案是进行手动递归.在这个SO问题中可以找到这种方法的一个很好的例子.
| 归档时间: |
|
| 查看次数: |
9301 次 |
| 最近记录: |