Directory.GetFiles возвращает неожиданные результаты с SearchPattern
Я работаю над пакетной программой, которая обрабатывает большое количество файлов (более 50 000 файлов), и сталкиваюсь со странным поведением с Directory.GetFiles
метод.
В процессе я перемещаю файлы, которые соответствуют следующему шаблону поиска "*.pdf", и получаю файлы благодаря Directory.GetFiles
Метод: Я был очень удивлен, увидев, что иногда я перемещаю файлы.pdfa.
Итак, я проверил документ, и в нем четко указано, что если шаблон поиска содержит расширение с 3 буквами, будут возвращены все файлы с расширением, которое начинается с расширения.
Я тестировал с простой программой, и она не ведет себя так, как указано в документе, она ведет себя так только в очень редких случаях.
С этим кодом:
static void Main(string[] args) {
var directory = @"E:\Test\";
var files = Directory.GetFiles(directory, "*.pdf");
foreach(var file in files)
Console.WriteLine(file);
}
У меня есть такой результат:
Есть ли у вас какие-либо объяснения по поводу этого поведения?
2 ответа
Это ожидаемое поведение метода GetFiles и то же самое в Windows. Если вы будете искать в каталоге с .pdf, он выберет файлы с расширениями.pdfa или *.pdfaaa, вам нужно будет поставить Where()
себя как:
Directory.GetFiles(directory, "*.pdf").Where(item => item.EndsWith(".pdf"));
Как вы можете видеть, когда мы ищем в окнах, он дает тот же результат, что и ваш код:
По причине того, почему GetFiles ведет себя так, пожалуйста, посмотрите здесь, и вы также можете посмотреть этот пост.
Как объяснили @luaan и @hans-passant (большое спасибо!), Я не нашел файл с расширением.pdfa, потому что на моем жестком диске отключен формат 8.3.
На жестком диске с включенным форматом 8.3 метод ведет себя так, как указано в документе.
GetFiles имеет другое поведение с включенным параметром или нет.