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

本文关键字:相对 路径 通配符 | 更新日期: 2023-09-27 18:18:08

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

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

是否有一个简单的方法来获得绝对文件路径的列表?例如

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

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

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

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

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

很简单。

using System.IO;
      .
      .
      .
string[] files = Directory.GetFiles(@"c:'", "*.txt", SearchOption.TopDirectoryOnly);