在所有可能的文件夹中查找文件?

6

我想知道如何使用C#在所有可能的目录中查找特定文件(例如cheese.exe),然后存储它所在的目录路径?

2个回答

12

这段代码片段检索机器上所有逻辑驱动器的列表,然后在驱动器上搜索与文件名“Cheese.exe”匹配的所有文件夹。一旦循环完成,列表“files”包含了

     var files = new List<string>();
     //@Stan R. suggested an improvement to handle floppy drives...
     //foreach (DriveInfo d in DriveInfo.GetDrives())
     foreach (DriveInfo d in DriveInfo.GetDrives().Where(x => x.IsReady == true))
     {
        files.AddRange(Directory.GetFiles(d.RootDirectory.FullName, "Cheese.exe", SearchOption.AllDirectories));
     }

1
几乎了 - 你需要添加搜索选项。 - Reed Copsey
当您无权访问给定目录时会发生什么情况...比如说"文档和设置" :) - Stan R.
是的,需要一些异常处理 - 片段将在大多数机器上失败,因为软盘驱动器未准备好。它显示了 GetFiles 方法的语法,这正是所需的。 - Hamish Smith
3
你可以使用以下代码快速处理软盘问题:DriveInfo.GetDrives().Where(x => x.IsReady == true)。 - Stan R.

3
如果您想了解有关搜索多个目录机制的更多信息,可以通过Google搜索查看此帖子。它提供了一个很好的解决方案,并对如何递归遍历目录进行了解释。您可以在Directory.GetFiles中更改文件规范以匹配您的搜索字符串,并可能直接使用它。
不幸的是,该链接现在已经失效,但简而言之,解决方案基本上可以归纳为:
string[] files = Directory.GetFiles("C:\\Starting\\Path\\For\\Search\\",
    "cheese.exe",
    SearchOption.AllDirectories);

注意文件规范(第二个参数)接受通配符,因此您也可以搜索“.exe”甚至“.*”以递归列出所有文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接