Разрешение относительных путей с подстановочными знаками в C # - PullRequest
10 голосов
/ 15 декабря 2011

В C #, если у меня есть путь к каталогу и относительный путь к файлу с подстановочным знаком, например,

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

Есть ли простой способ получить список абсолютных путей к файлам? например,

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

Фон

Существует дерево исходного кода, в котором любой каталог может содержать файл определения сборки. Этот файл использует относительные пути с подстановочными знаками, чтобы указать список исходных файлов. Задача состоит в том, чтобы сгенерировать список абсолютных путей всех исходных файлов для каждого из этих файлов определений сборки.

Ответы [ 2 ]

3 голосов
/ 15 декабря 2011

Сначала вы можете получить абсолютный путь, а затем перечислить файлы в каталоге, соответствующие шаблону:

// 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 голос
/ 15 декабря 2011

Все просто.

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