在C#中使用通配符解析相对路径

NS.*_*.X. 10 .net c# wildcard relative-path path-combine

在C#中,如果我有一个目录路径和一个带通配符的相对文件路径,例如

"c:\foo\bar""..\blah\*.cpp"

有一种简单的方法来获取绝对文件路径列表吗?例如

{ "c:\foo\blah\a.cpp", "c:\foo\blah\b.cpp" }

背景

有一个源代码树,其中任何目录都可以包含构建定义文件.此文件使用带通配符的相对路径来指定源文件列表.任务是为每个这些构建定义文件生成所有源文件的绝对路径列表.

Ste*_*uer 4

您可以先获取绝对路径,然后枚举与通配符匹配的目录内的文件:

// input
string rootDir = @"c:\foo\bar"; 
string originalPattern = @"..\blah\*.cpp";

// Get directory and file parts of complete relative pattern
string pattern = Path.GetFileName (originalPattern); 
string relDir = originalPattern.Substring ( 0, originalPattern.Length - pattern.Length );
// Get absolute path (root+relative)
string absPath = Path.GetFullPath ( Path.Combine ( rootDir ,relDir ) );

// Search files mathing the pattern
string[] files = Directory.GetFiles ( absPath, pattern, SearchOption.TopDirectoryOnly );
Run Code Online (Sandbox Code Playgroud)