【发布时间】:2011-03-01 08:58:55
【问题描述】:
如何获取与windows文件系统相同的文件序列?因为文件系统排序项太多:名称、大小、最后修改日期时间、标签(win 7)、评级(win 7),所以如果我使用CFileFind API模拟windows文件系统的排序行为是相当困难的。那么如何获取与windows文件系统顺序相同的文件呢?
【问题讨论】:
标签: windows
如何获取与windows文件系统相同的文件序列?因为文件系统排序项太多:名称、大小、最后修改日期时间、标签(win 7)、评级(win 7),所以如果我使用CFileFind API模拟windows文件系统的排序行为是相当困难的。那么如何获取与windows文件系统顺序相同的文件呢?
【问题讨论】:
标签: windows
我不确定 CFindFile 的作用,但FindFirstFile 和朋友会按照它们在 NTFS 目录中存在的顺序返回文件。
我不知道为什么这会是最理想的,不过,按照任何人的定义,它都不完全是“直观的”......
【讨论】:
Raymond Chen 在"Why do NTFS and Explorer disagree on filename sorting?"上写了一篇相当详细的文章
但是,请注意FindFirstFile() 及其亲属实际上并没有对结果进行排序 - 它只是按照文件系统提交文件的顺序将文件返回给您。 NTFS 有一个用于其自身目的的排序(我不确定是否指定了该排序 - 它对您来说似乎是有序的,这可能只是一个快乐的巧合)。 FAT 文件系统和网络文件系统将有自己的顺序(或没有顺序 - 文件可能只是在目录中按它们碰巧创建的顺序 - 我认为 FAT 系统就是这样)。
如果您需要 FindFirstFile() 和朋友返回的文件的特定顺序,您需要自己进行排序。
来自FindFirstFile() docs:“FindFirstFile 不对搜索结果进行排序。有关更多信息,请参阅 FindNextFile。”
并且来自docs for FindNextFile():“搜索返回文件的顺序,如字母顺序,不能保证,并且取决于文件系统。如果必须对数据进行排序,则应用程序必须执行得到所有结果后排序。”
CFileFind() 不承诺返回的文件名的顺序 - 如果它进行任何排序,我会感到惊讶(因为它必须从目标目录中获取所有可能的文件,然后才能返回第一个能够把它拉下来)。
【讨论】: