我注意到在 cmd 中,使用 (*) 或 (*.*) 将匹配所有文件和目录。例如,当将控制台应用程序的参数设置为(*.*)时,它不仅匹配当前目录中的文件,还匹配目录。如何使用通配符仅匹配文件?它最初的设计目的是像这样工作吗(匹配文件和目录)?目前,我的解决方案是在处理 (*) 时循环遍历 argv 参数并检查每个参数是否是目录。还有比这个更简单的方法吗?另外,在Windows环境下,在不使用API函数或stat函数的情况下,是否还有其他C函数或CRT(C Runtime Library)函数可以确定目标是文件还是目录?
*
api,
*.*
和 NtQueryDirectoryFile[Ex]
不一样。但是 FindFirstFile[Ex]
api 特别检查 *.*
掩码并将其替换为 *
。所以是否相同,取决于使用什么 api。无论如何,如果我们需要枚举所有不带过滤器的文件,最好使用*
。如果我们恰好需要 *.*
逻辑(仅包含 .
符号的文件)需要使用 NtQueryDirectoryFile[Ex]