C#使用Pattern递归查找文件

时间:2016-03-03 09:37:45

标签: c# file directory

我有一个具有以下结构的Visual Studio解决方案:

- root
 - src
  - project01
  - project02
 - config
  - application.config
  - database.dacpac

现在,假设我正在执行路径中的代码:

C:\DEV\root\project01\bin\release\project01.exe

如何找到第一次出现文件" application.config"例如?

我知道我可以从这开始:

public string GetExecutingDirectory(){
{
   string codeBase = Assembly.GetExecutingAssembly().CodeBase;
   UriBuilder uri = new UriBuilder(codeBase);
   string path = Uri.UnescapeDataString(uri.Path);
   return Path.GetDirectoryName(path);
}

并按以下方式使用它:

var executingDirectory = GetExecutingDirectory();

但是现在,我怎样才能反复遍历根树,直到找到我要查找的文件为止? 我试过这段代码,但它找不到任何东西:

var path = Directory
   .GetFiles(executingDirectory, 
      "**/application.config", 
      System.IO.SearchOption.AllDirectories);

我需要它,因为我正在运行来自不同路径的集成测试,他们需要这些文件,这些文件可以位于解决方案树的不同位置,具体取决于DEV计算机配置,因此我需要使用"模式&#34 ;因为PC到PC的结构可能不同。

1 个答案:

答案 0 :(得分:2)

你可以这样做:

static string FindConfig()
{
    string appFolder = Path.GetDirectoryName(@"C:\DEV\root\project01\bin\release\project01.exe");
    string configPath = null;
    while (true)
    {
        Console.WriteLine(appFolder);
        string[] files = Directory.GetFiles(appFolder, "*application.config", SearchOption.AllDirectories);
        foreach (var file in files)
        {
            if (file.ToLower().EndsWith(@"\application.config"))
            {
                return file;
            }
        }
        appFolder = Path.GetDirectoryName(appFolder);
        if (appFolder.Length < 4) // "C:\" don't search root drive
        {
            break;
        }
    }
    return configPath;
}