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

时间:2013-07-12 10:44:28

标签: c#

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

但在运行中我遇到此错误: enter image description here

如何解决它?

谢谢。

2 个答案:

答案 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