【问题标题】:Find a file within all possible folders?在所有可能的文件夹中查找文件?
【发布时间】:2023-03-03 08:23:33
【问题描述】:

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

【问题讨论】:

    标签: c# file search filesystems


    【解决方案1】:

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

         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));
         }
    

    【讨论】:

    • 差不多——你需要在SearchOption中添加
    • 当您无权访问给定目录时会发生什么...说“文档和设置”:)
    • 是的,一些异常处理将是必要的 - 由于软盘驱动器未准备好,大多数机器上的片段将失败。但它显示了 GetFiles 方法的语法,这是需要的。
    • @Hamish:您可以这样做以快速处理软盘问题。 DriveInfo.GetDrives().Where(x => x.IsReady == true)
    【解决方案2】:

    如果您想了解更多关于搜索多个目录的机制,谷歌搜索揭示了this post。它有一个很好的解决方案和自己通过目录递归的解释。您可以更改 Directory.GetFiles 中的文件规范以匹配您的搜索字符串并可能按原样使用它。

    不幸的是,该链接现在已失效,但简而言之,解决方案基本上可以归结为:

    string[] files = Directory.GetFiles("C:\\Starting\\Path\\For\\Search\\",
        "cheese.exe",
        SearchOption.AllDirectories);
    

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

    【讨论】:

      猜你喜欢
      • 2012-08-05
      • 2021-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-12
      • 1970-01-01
      相关资源
      最近更新 更多