【问题标题】:Bug in Windows's FindFirstFile() function?Windows 的 FindFirstFile() 函数中的错误?
【发布时间】:2011-05-29 07:11:42
【问题描述】:

为什么使用*.* 模式调用FindFirstFile 会匹配Windows 这样的名称?

编辑:我想我也可以猜测发生了什么,但是否也有任何文档说明原因?

【问题讨论】:

  • 或许无非就是*匹配空字符串。尝试*.?* 说匹配非空扩展名
  • @David:但是如果文件名以句点结尾呢?
  • 您提到 * 可能匹配空字符串,但仅当文件名以句点结尾时才有效。 Windows 不以句号结尾,为什么要匹配?
  • 它的简称有句号。所有短名称都可以。
  • 也许你应该阅读 Wine 的源代码,如果不是它背后的基本原理,至少你会学习算法

标签: winapi file file-io wildcard


【解决方案1】:

'How did wildcards work in 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.

【讨论】:

    【解决方案2】:

    *.* 匹配目标目录中的所有内容。

    这是因为*. 匹配到最后一个时段;如果名称中有 no 句点,则该名称被视为以句点结尾;所以*. 仅匹配以句点开头的名称和不包含句点的名称 (.afile / adirname) 如果您在末尾为 * 添加*.* 那么它也匹配超出最后一个句点,因此包括包含句点的文件名, 这涵盖了所有可能的文件名。

    【讨论】:

      猜你喜欢
      • 2018-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多