FindNextFile WinApi函数用于列出目录的内容.微软在文档中说明,该顺序依赖于文件系统.但是NTFS在大多数情况下应该按字母顺序排列.
此函数返回文件名的顺序取决于文件系统类型.使用NTFS文件系统和CDFS文件系统时,名称通常按字母顺序返回.对于FAT文件系统,名称通常按文件写入磁盘的顺序返回,这可能是也可能不是按字母顺序排列.但是,如前所述,这些行为无法保证.
我的应用程序需要一些目录中的对象排序.由于大多数Windows用户使用NTFS,我想优化我的应用程序.因此我使用函数_wcsicmp进行名称比较.大多数情况下它是正确的,FindNextFile的结果是根据_wcsicmp排序的.但有时候结果没有排序.我想,这很自然,因为FindFirstFile不保证顺序,我必须对它进行排序(如果是另一个文件系统).然后我注意到奇怪的模式.看起来字母'_'在字母后返回.带有内容的文件夹(a.txt,b.txt,_. txt)按顺序a,b,_返回.函数_wcsicmp将其排序为_,a,b.在Windows 8.1上测试过.我运行了一些测试,这种行为是一致的.
有人可以解释一下NTFS使用的比较标准是什么?或者为什么FindNextFile会按字母顺序返回名称?
因为NTFS排序规则不是那么简单,只是按字母顺序排序.这是一篇msdn博客文章,阐述了这个问题:
这样做的一个原因可能是NTFS在格式化驱动器时捕获案例映射表并继续使用该表,即使操作系统的案例映射表随后发生更改.