在C#中,如果我有一個目錄路徑和一個帶有通配符的相對文件路徑,"c:\foo\bar"
和"..\blah\*.cpp"
,有沒有一種簡單的方法來獲取絕對文件路徑列表,{ "c:\foo\blah\a.cpp", "c:\foo\blah\b.cpp" }
?用C中的通配符解析相對路徑#
背景:有一個源碼樹,任何目錄都可以包含構建定義文件,它使用相對路徑和通配符來指定源文件。此處的任務是爲每個構建定義文件生成所有源文件的絕對路徑列表。
在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);
System.IO.Directory.EnumerateFiles可以讓你在是searchPattern PARAM指定通配符,請參閱:http://msdn.microsoft.com/en-us/library/dd413233.aspx並將返回絕對路徑 – Polity 2011-12-15 08:48:16
@Polity,System.ArgumentException:搜索模式不能包含「..」以向上移動目錄 – 2011-12-15 19:29:39