Directory.GetFiles (LocalFilePath, searchPattern);
MSDN Примечания:
При использовании подстановочного знака звездочки в searchPattern, такого как " .txt", поведение сопоставления, когда расширение имеет длину ровно три символа, отличается от того, когда расширение имеет длину больше или меньше трех символов. SearchPattern с расширением файла ровно из трех символов возвращает файлы с расширением из трех или более символов, где первые три символа соответствуют расширению файла, указанному в searchPattern. SearchPattern с расширением файла, состоящим из одного, двух или более трех символов, возвращает только файлы с расширениями точно такой длины, которые соответствуют расширению файла, указанному в searchPattern. При использовании подстановочного знака вопросительного знака этот метод возвращает только файлы, которые соответствуют указанному расширению файла. Например, при наличии двух файлов «file1.txt» и «file1.txtother» в каталоге шаблон поиска «file? .Txt» возвращает только первый файл, а шаблон поиска «file ». TXT "возвращает оба файла.
В следующем списке показано поведение различной длины для параметра searchPattern:
*.abc
возвращает файлы с расширением .abc
, .abcd
, .abcde
, .abcdef
и т. Д.
*.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();
}
Кто-нибудь еще лучшее решение?