#c# #.net
#c# #.net
Вопрос:
Я пытаюсь получить jpeg
jpg
файлы и, используя следующую инструкцию:
string[] files = Directory.GetFiles(someDirectoryPath, "*.jp?g");
Документы MSDN для System.IO.Directory.Состояние GetFiles(строка, строка), ?
представляющее «Ровно ноль или один символ»., Однако приведенный выше блок выбирает jpeg
файлы, но опускает jpg
файлы.
В настоящее время я использую шаблон поиска с чрезмерным разрешением "*.jp*g"
для достижения своих результатов, но он морщит мой мозг, потому что он должен работать.
Ответ №1:
Из документов, на которые вы ссылались:
Шаблон поиска с расширением файла в один, два или более трех символов возвращает только файлы, имеющие расширения точно такой длины, которые соответствуют расширению файла, указанному в шаблоне поиска.
Я подозреваю, что это проблема. Честно говоря, я бы, вероятно, извлек все файлы, а затем обработал их в коде — это сделает код, о котором проще рассуждать, чем полагаться на странности обработки пути Windows.
Комментарии:
1. @svick: Согласен — но это показывает, что все это немного странно из-за количества символов в расширении. Вот почему я предложил вместо этого постобработку 🙂
2. AFAIK
?
соответствует ровно одному символу и*
соответствует чему угодно (включая нулевые символы )…3. @Jon: Спасибо. Я постараюсь прочитать эти желтые заметки в будущем, а не предполагать рационального поведения. Еще раз спасибо.
Ответ №2:
Вы можете либо использовать "*"
в качестве шаблона и обработать результат самостоятельно, ЛИБО использовать
string[] files = Directory.GetFiles(someDirectoryPath, "*.jpg").Union (Directory.GetFiles(someDirectoryPath, "*.jpeg")).ToArray();
Согласно документам, используемый вами шаблон будет возвращать только файлы с расширениями длиной 4 символа.