2011-12-15 55 views
7

在C#中,如果我有一個目錄路徑和一個帶有通配符的相對文件路徑,"c:\foo\bar""..\blah\*.cpp",有沒有一種簡單的方法來獲取絕對文件路徑列表,{ "c:\foo\blah\a.cpp", "c:\foo\blah\b.cpp" }用C中的通配符解析相對路徑#

背景:有一個源碼樹,任何目錄都可以包含構建定義文件,它使用相對路徑和通配符來指定源文件。此處的任務是爲每個構建定義文件生成所有源文件的絕對路徑列表。

+0

System.IO.Directory.EnumerateFiles可以讓你在是searchPattern PARAM指定通配符,請參閱:http://msdn.microsoft.com/en-us/library/dd413233.aspx並將返回絕對路徑 – Polity 2011-12-15 08:48:16

+0

@Polity,System.ArgumentException:搜索模式不能包含「..」以向上移動目錄 – 2011-12-15 19:29:39

回答

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

它很簡單。

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