2010-03-10 43 views
1

我怎样才能得到与windows文件系统相同的文件序列?因为有太多的文件系统排序项目:名称,大小,上次修改日期时间,标记(赢7),评级(赢7),所以如果我使用CFileFind API来模拟排序行为,因为Windows文件系统是非常困难的。那么如何才能得到序列与Windows文件系统相同的文件?关于windows系统排序问题的问题

回答

0

我不确定CFindFile是做什么的,但FindFirstFile和朋友以它们在NTFS目录中存在的顺序返回文件。

我不知道为什么,这将是最可取的,但是,这不是任何人的定义正是“直觉” ......

+0

CFindFile方法类似于FindFirstFile,它们都是按字母排序的。有人建议我使用IShellFolder API,是否有人熟悉IShellFolder方法? – user290305

+0

哦,我不明白你的问题......我以为你想按照文件系统顺序排序文件,而不是按照浏览器使用的顺序。资源管理器使用*大致*与StrCmpLogicalW相同的顺序,所以你可以使用它来排序文件名。 –

+0

Emm,我想要检索与浏览器相同的文件序列,而不是文件系统顺序。但是浏览器中的文件序列是由用户根据文件大小,上次修改日期时间等设计的,并且在浏览器中有很多排序标准,所以我无法模拟探索文件排序。所以仅将文件排序为StrCmpLogicalW是不够的。 – user290305

0

雷蒙德陈做了"Why do NTFS and Explorer disagree on filename sorting?"

一个相当详细的文章。然而,请注意0​​及其亲属实际上没有对结果进行排序 - 只是将文件以文件系统交给他人的顺序传回给您。 NTFS为了自己的目的有一个排序(我不确定那个排序是否被指定 - 它看起来对你而言可能只是一个快乐的巧合)。 FAT文件系统和网络文件系统将会有自己的顺序(或者没有顺序 - 这些文件可能只是以它们碰巧创建的顺序存在于目录中 - 我认为FAT系统就是这样)。

如果您需要由FindFirstFile()和朋友返回的文件的特定订单,您需要自行排序。

FindFirstFile() docs:“FindFirstFile不对搜索结果进行排序,有关其他信息,请参阅FindNextFile。”

并从docs for FindNextFile():“搜索返回文件的顺序,如字母顺序,不能保证,并且依赖于文件系统。如果数据必须排序,应用程序必须执行排序获得所有结果后“。

CFileFind()对返回的文件名的顺序没有任何承诺 - 如果它进行了任何排序,我会感到惊讶(因为它必须在返回第一个文件之前从目标目录中获取所有可能的文件以便能够把它拉开)。

+0

嗯,我想检索与浏览器相同的文件序列,但资源管理器中的文件序列由用户在文件大小,上次修改日期时间等设计,并且在浏览器中有许多排序标准,所以我不能模拟探索文件排序。那么是否有任何方法来获取文件序列作为探索? – user290305