3

所以,我觉得问这个很蹩脚,但我有点难过。我正在尝试获取以 tif 结尾的目录中的文件列表......只有 tif ......不是 tiff。所以,我在 C# 中做了这个......

Directory.GetFiles(path, "*.tif", SearchOption.TopDirectoryOnly);

我希望它只返回 tif 文件,但事实并非如此。我也得到 tiff。我想如果我提供面具.tif?那会让我两个都得到,但不是面具.tif。我也在命令提示符下尝试了它,并且在 DOS 中我也得到了两者。我在这里错过了什么吗?这对我来说似乎是错误的。我想我可以在之后对结果进行消毒,但如果我不必这样做,那将是最好的。

4

4 回答 4

2

来自MSDN:

在 searchPattern(例如,“*.txt”)中使用星号通配符时,匹配行为会因指定文件扩展名的长度而异。文件扩展名恰好为三个字符的 searchPattern 返回扩展名为三个或更多字符的文件,其中前三个字符与 searchPattern 中指定的文件扩展名匹配。文件扩展名为一个、两个或三个以上字符的 searchPattern 仅返回扩展名与 searchPattern 中指定的文件扩展名完全匹配的文件。使用问号通配符时,此方法仅返回与指定文件扩展名匹配的文件。例如,给定目录中的两个文件“file1.txt”和“file1.txtother”,“file?.txt”的搜索模式只返回第一个文件,而“file*.txt”的搜索模式返回两个文件。

于 2013-04-03T17:01:43.030 回答
1

这就是Directory.GetFiles的工作方式。从手册:

在 searchPattern 中使用星号通配符(例如“*.txt”)时,扩展名正好是三个字符长时的匹配行为与扩展名长度多于或少于三个字符时的匹配行为不同。文件扩展名正好为三个字符的 searchPattern 返回具有三个或更多字符扩展名的文件,其中前三个字符与 searchPattern 中指定的文件扩展名匹配。

于 2013-04-03T17:00:43.733 回答
0

Directory.GetFiles内部使用FindFirstFile来自 Win32 API 的函数

从以下文档FindFirstFile

• 搜索包括长文件名和短文件名。

具有长文件名的文件asd.tiff将具有短文件名asd~1.tif,这就是它出现在结果中的原因。

于 2013-04-03T17:08:01.213 回答
0

匹配的字符扩展名超过三个,除非路径位于网络共享(或映射的驱动器)上。由于某种原因,该模式仅匹配远程驱动器上的长文件名。

于 2015-10-22T22:01:54.173 回答