Directory.GetFiles(LocalFilePath,searchPattern);過濾文件名:獲取* .abc不帶* .abcd或* .abcde等
MSDN注:
當在是searchPattern使用星號通配符,例如「.TXT」,當擴展名是正好三個字符長比當延伸是多個不同的匹配模式或少於三個字符長。具有正好三個字符的文件擴展名的searchPattern將返回具有三個或更多字符的擴展名的文件,其中前三個字符與searchPattern中指定的文件擴展名匹配。具有一個,兩個或多於三個字符的文件擴展名的searchPattern僅返回具有與searchPattern中指定的文件擴展名相匹配的正好具有該長度的擴展名的文件。當使用問號通配符時,此方法只返回與指定文件擴展名匹配的文件。例如,在目錄中給定兩個文件「file1.txt」和「file1.txtother」,「file?.txt」的搜索模式僅返回第一個文件,而「文件.txt」的搜索模式返回這兩個文件。
以下列表顯示了不同長度的爲是searchPattern參數的行爲:具有.abc
,.abcd
,.abcde
,.abcdef
,等等的擴展
*.abc
返回文件。*.abcd
僅返回擴展名爲.abcd
的文件。*.abcde
僅返回擴展名爲.abcde
的文件。*.abcdef
僅返回擴展名爲.abcdef
的文件。
隨着searchPattern
參數設置爲*.abc
,我怎麼能回到具有.abc
的延伸,而不是.abcd
,.abcde
等文件?
也許這個功能將工作:
private bool StriktMatch(string fileExtension, string searchPattern)
{
bool isStriktMatch = false;
string extension = searchPattern.Substring(searchPattern.LastIndexOf('.'));
if (String.IsNullOrEmpty(extension))
{
isStriktMatch = true;
}
else if (extension.IndexOfAny(new char[] { '*', '?' }) != -1)
{
isStriktMatch = true;
}
else if (String.Compare(fileExtension, extension, true) == 0)
{
isStriktMatch = true;
}
else
{
isStriktMatch = false;
}
return isStriktMatch;
}
測試程序:
class Program
{
static void Main(string[] args)
{
string[] fileNames = Directory.GetFiles("C:\\document", "*.abc");
ArrayList al = new ArrayList();
for (int i = 0; i < fileNames.Length; i++)
{
FileInfo file = new FileInfo(fileNames[i]);
if (StriktMatch(file.Extension, "*.abc"))
{
al.Add(fileNames[i]);
}
}
fileNames = (String[])al.ToArray(typeof(String));
foreach (string s in fileNames)
{
Console.WriteLine(s);
}
Console.Read();
}
別人更好的解決辦法?
你將給予更多的上下文...... – Eclipse 2009-01-13 03:57:25