解决与在C#通配符相对路径

问题描述 投票:10回答:2

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

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

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

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

背景

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

c# .net wildcard relative-path path-combine
2个回答
3
投票

你可以先拿到绝对路径,然后枚举匹配通配符的目录里的文件:

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

1
投票

这很简单。

using System.IO;
      .
      .
      .
string[] files = Directory.GetFiles(@"c:\", "*.txt", SearchOption.TopDirectoryOnly);
© www.soinside.com 2019 - 2024. All rights reserved.