Directory.GetFiles(LocalFilePath, searchPattern);
MSDN 注释:
在 searchPattern 中使用星号通配符时,例如“.txt”,当扩展名正好是三个字符时的匹配行为与扩展名长度大于或小于三个字符时不同。文件扩展名正好是三个字符的 searchPattern 返回具有三个或更多字符扩展名的文件, 其中前三个字符与 searchPattern 中指定的文件扩展名匹配。文件扩展名为一个、两个或三个以上字符的 searchPattern 仅返回扩展名与 searchPattern 中指定的文件扩展名完全匹配的文件。当使用问号通配符时,该方法只返回与指定文件扩展名匹配的文件。例如,给定目录中的两个文件,“file1.txt”和“file1.txtother”,搜索模式为“file? 。文本”只返回第一个文件,而搜索模式“文件.txt" 返回两个文件。
以下列表显示了 searchPattern 参数的不同长度的行为:
*.abc
返回具有.abc
,.abcd
,.abcde
,.abcdef
, 等扩展名的文件。*.abcd
仅返回扩展名为.abcd
.*.abcde
仅返回扩展名为.abcde
.*.abcdef
仅返回扩展名为.abcdef
.
将searchPattern
参数设置为*.abc
,如何返回扩展名为.abc
、 not.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();
}
还有其他更好的解决方案吗?