为什么用模式*.*
调用FindFirstFile
与Windows
这样的名称匹配?
编辑:我想我也可以猜测发生了什么,但也有关于原因的文档吗?
在博客文章"通配符如何在MS-DOS中工作?"Raymond Chen描述了最初的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.
*.*
匹配目标目录中的所有内容。
这是因为*.
匹配到最后一个周期;如果名称中没有句点,则将该名称视为以句点结束;所以*.
只匹配以句点开头的名称和不包含句点的名称(.afile / adirname
)。如果在*.*
的末尾添加*
,那么它也会匹配到最后一个句点之后,所以包括包含句点的文件名,这涵盖了所有可能的文件名。