Directory.GetFileSystemInfos(string)返回不匹配的文件

时间:2009-09-02 17:58:50

标签: .net file filepattern

我正在使用follow命令获取FileSystemInfo的列表

IList<FileSystemInfo> requestFiles = 
                new List<FileSystemInfo>(
                    _RequestDirectory.GetFileSystemInfos(GetSearchPatern())); 

获取搜索模式返回“* .exr”。该列表仍包含以“.exr2”结尾的文件,但不包括以“.exr.bak”结尾的文件。这是预期的功能吗?我应该手动检查返回的文件吗?我注意到这与我在命令行上从dir命令获得的结果相同。

2 个答案:

答案 0 :(得分:2)

来自MSDN:

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

从这里开始http://msdn.microsoft.com/en-us/library/wz42302f.aspx

.exr.bak与“* .exr”不匹配的原因是因为扩展名被确定为最后一个'。'之后的字符集。 (或文件扩展名分隔符),因此.exr与.bak不匹配。

答案 1 :(得分:1)

这是由为文件自动生成的short names引起的。简而言之,扩展名始终是“。”之后的最后一个。并且最多包含3个字符。短名称“example.ext2”将以“.ext”结尾,短名称“example.ext.bak”将以“.bak”结尾。