Ошибка в функции FindFirstFile () в Windows? - PullRequest
4 голосов
/ 29 мая 2011

Почему вызов FindFirstFile с шаблоном *.* соответствует имени, подобному Windows?

Редактировать: Полагаю, я тоже могу угадайте что происходит, но есть ли какая-либо документация по причине?

Ответы [ 2 ]

5 голосов
/ 29 мая 2011

В блоге 'Как подстановочные знаки работали в MS-DOS?' Раймонд Чен описывает, как было реализовано первоначальное сопоставление подстановочных знаков DOS. В конце поста он указывает, как *.* обрабатывается как особый случай в алгоритме сопоставления подстановочных знаков Win32.

Цитата из поста

For example, if your pattern ends in .*, the .* is ignored. Without this rule, the pattern *.* would match only files that contained a dot, which would break probably 90% of all the batch files on the planet, as well as everybody's muscle memory, since everybody running Windows NT 3.1 grew up in a world where *.* meant all files.

1 голос
/ 29 мая 2011

*.* соответствует всему в целевом каталоге.

Это потому, что *. соответствует последнему периоду; если в имени есть нет периода, то это имя обрабатывается так, как если бы оно заканчивалось точкой; поэтому *. соответствует только именам, начинающимся с точки, и именам, не содержащим точку (.afile / adirname), если вы добавляете * в конце для *.*, тогда оно также совпадает после последнего периода, поэтому включает имена файлов, содержащие точку это охватывает все возможные имена файлов.

...