4

我正在使用此代码搜索所有驱动器中的所有目录以搜索所有 .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;
}

但是在运行时我遇到了这个错误: 在此处输入图像描述

如何解决?

谢谢你。

4

2 回答 2

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.GetFileswithAllDirectories选项存在一个固有问题,即如果整个驱动器中的任何文件夹都无法访问,它将失败,因此您将不会在结果中获得该驱动器的任何文件。解决方案是进行手动递归。这个 SO question中提供了这种方法的一个很好的例子。

于 2013-07-12T10:47:08.523 回答
0

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

请检查:

未授权访问异常-无法解决-目录-getfiles-失败

于 2013-07-12T10:53:50.980 回答