假设您有一个包含以下目录的目录:
dontgetme
get.me
如果您使用以下代码:
string[] directories = Directory.GetDirectories(rootDirectory, "*.*", SearchOption.TopDirectoryOnly);
您希望directories
包含:
get.me
但它包含两个目录,为什么会这样?
查看documentation唯一的通配符为*
和?
,因此他们不应该对此产生影响。
此外,如果您使用模式*.
,则仅返回dontgetme
目录;但是使用*.*.*.*
等仍然会返回。
如果重要,我在Windows 10上使用.NET 4.6.1和C#6。
答案 0 :(得分:3)
你的模式意味着"任何具有任何扩展名的东西"。 没有扩展程序 "任何扩展程序",因此您匹配所有四个。
您可以尝试?*.?*
作为模式,这样您就可以获得至少包含一个字符作为扩展和名称的字符。
答案 1 :(得分:2)
Windows文件和目录名称始终具有扩展名,即使它是空白的。因此props
与// Collection component
export default {
props: ['cid'],
template: ...,
}
// Breadcrumb component
export default {
props: ['cid', 'iid'],
template: ...,
}
匹配,因为它被视为*.*
答案 2 :(得分:1)
原因归结为兼容性决定。最终,C#最终会调用Win32 FindFirstFile方法进行搜索。
调查一下,我实际上找到了解释它的this answer。
我将重复该答案的引用(摘自this blog post):
例如,如果您的模式以
.*
结尾,则忽略.*
。如果没有这个规则,模式。将仅匹配包含点的文件,这可能会破坏地球上所有批处理文件的90%,以及每个人的肌肉记忆,因为每个人都运行Windows NT 3.1在*.*
表示所有文件的世界中长大。
同一问题的other answer也解释了涉及*.
的行为(强调我的):
*.*
匹配目标目录中的所有内容。这是因为
*.
匹配到最后一段时间;如果名称中有 no 句点,则该名称将被视为在一段时间内结束; 因此,如果您在*.
的末尾添加.afile / adirname
,*
仅匹配以句点开头的名称和不包含句点的名称(*.*
)然后它也匹配超出最后一个时期,因此包括一个包含句点的文件名,这涵盖了所有可能的文件名。