我有一个具有以下结构的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的结构可能不同。
答案 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;
}