Получение файлов в каталоге с маской файла *.tif с использованием С#

Итак, мне неудобно спрашивать об этом, но я немного в тупике. Я пытаюсь получить список файлов в каталоге, которые заканчиваются на tif... только tif... не tiff. Итак, я сделал это на С#...

Directory.GetFiles(path, "*.tif", SearchOption.TopDirectoryOnly);

Я бы ожидал, что он будет возвращать только файлы tif, но это не так. Я тоже получаю тифф. Я думаю, что если я укажу маску .tif?, я получу и то, и другое, но не маску .tif. Я также пробовал это в командной строке, и я получаю и то, и другое в DOS. Я что-то упустил здесь? Это просто кажется мне неправильным. Я думаю, я мог бы дезинфицировать результаты впоследствии, но если мне не нужно, это было бы лучше.


person Davin Studer    schedule 03.04.2013    source источник


Ответы (4)


Из MSDN:

При использовании подстановочного знака звездочки в searchPattern (например, "*.txt") поведение сопоставления зависит от длины указанного расширения файла. SearchPattern с расширением файла ровно три символа возвращает файлы с расширением из трех или более символов, где первые три символа соответствуют расширению файла, указанному в searchPattern. SearchPattern с расширением файла из одного, двух или более трех символов возвращает только файлы с расширениями именно такой длины, которые соответствуют расширению файла, указанному в searchPattern. При использовании подстановочного знака вопросительного знака этот метод возвращает только файлы, соответствующие указанному расширению файла. Например, при наличии двух файлов в каталоге, "file1.txt" и "file1.txtother", Шаблон поиска "file?.txt" возвращает только первый файл, а шаблон поиска "file*.txt" возвращает оба файла.

person E.T.    schedule 03.04.2013
comment
Конечно же. Это действительно хреново... я думаю. Думаю, мне просто нужно обработать результаты ... тьфу! - person Davin Studer; 03.04.2013

Именно так работает Directory.GetFiles. Из руководства:

При использовании подстановочного знака звездочки в searchPattern, таком как "*.txt", поведение сопоставления, когда длина расширения составляет ровно три символа, отличается от поведения, когда длина расширения больше или меньше трех символов. SearchPattern с расширением файла ровно из трех символов возвращает файлы с расширением из трех или более символов, где первые три символа соответствуют расширению файла, указанному в searchPattern.

person alex    schedule 03.04.2013

Directory.GetFiles внутри использует FindFirstFile функцию из Win32. API.

Из документации FindFirstFile:

• Поиск включает длинные и короткие имена файлов.

Файл с длинным именем asd.tiff будет иметь короткое имя файла, например asd~1.tif, поэтому оно отображается в результатах.

person Knaģis    schedule 03.04.2013

Соответствует более трех символов расширения, кроме, когда путь находится на общем сетевом ресурсе (или подключенном диске). По какой-то причине шаблон соответствует только длинному имени файла на удаленных дисках.

person PeterKinDC    schedule 22.10.2015