所以,我觉得这个问题很蹩脚,但我有点难过。我想在一个以tif结尾的目录中获取一个文件列表...只有tif ...而不是tiff。所以,我在C#中做到了这一点......
Directory.GetFiles(path, "*.tif", SearchOption.TopDirectoryOnly);
我希望它只返回tif文件,但事实并非如此。我也得到了tiff。我想如果我提供了面具 .tif? ,那将会让我两个,但不是面具 的 .TIF 即可。我也在命令提示符下尝试了它,我在DOS中也得到了它们。我在这里错过了什么吗?这对我来说似乎不对。我想我之后可以对结果进行消毒,但如果我没有这样做那将是最好的。
答案 0 :(得分:2)
来自MSDN:
在searchPattern中使用星号通配符时(for 例如,“* .txt”),匹配行为取决于 指定文件扩展名的长度。带有文件的searchPattern 正好三个字符的扩展名返回带扩展名的文件 三个或更多字符,前三个字符匹配 searchPattern中指定的文件扩展名。一个searchPattern 文件扩展名为一个,两个或三个以上的字符 仅返回扩展名完全匹配的文件 searchPattern中指定的文件扩展名。 使用时 问号通配符,此方法仅返回文件 匹配指定的文件扩展名。例如,给定两个文件 目录,“file1.txt”和“file1.txtother”,搜索模式 “file?.txt”仅返回第一个文件,而搜索模式为 “file * .txt”返回两个文件。
答案 1 :(得分:1)
这就是Directory.GetFiles的工作原理。从手册:
在searchPattern中使用星号通配符时,例如 “* .txt”,扩展名正好为3时的匹配行为 字符长度与扩展名或多或少时不同 超过三个字符。 searchPattern,文件扩展名为 正好三个字符返回扩展名为3或的文件 更多字符,前三个字符与文件匹配 searchPattern中指定的扩展名。
答案 2 :(得分:0)
Directory.GetFiles
内部使用FindFirstFile
function from Win32 API。
来自FindFirstFile
的文档:
•搜索包括长文件名和短文件名。
文件名长为asd.tiff
的文件将有一个短文件名,如asd~1.tif
,这就是它出现在结果中的原因。
答案 3 :(得分:0)
当路径位于网络共享(或映射驱动器)上时,超过三个字符扩展名与匹配,但除外。由于某种原因,模式只匹配远程驱动器上的长文件名。