当前位置:  开发笔记 > 编程语言 > 正文

如何让FindFirstFile对文件进行排序

如何解决《如何让FindFirstFile对文件进行排序》经验,为你挑选了2个好方法。

我正在使用标准FindFirstFindNext检索目录中的所有文件,但我需要将结果重新排序(按照在资源管理器中单击名称列的顺序相同的顺序排序)我怎样才能实现这一点必须完成通过Win32谢谢



1> Brian R. Bon..:

您可以使用索引服务,但我建议您在使用FindFirstFile时自行处理排序.

FindFirstFile Win32 API无法进行排序.有一个稍微高级的FindFirstFileEx,但即使这样也不允许排序.

关于FindFirstFile的限制,有一篇关于The Old New Thing的Raymond Chen 帖子.

你最好的选择可能是将所有结果加载到一个向量中,然后对其进行排序.



2> RBerteig..:

正如大家所指出的那样,FindFirstFile()不会也不能对它返回的文件进行排序.它以相当低的级别运行,并按照与文件系统目录中目录条目的自然顺序相关的顺序返回文件.

在使用FAT和FAT32格式化的磁盘上,该顺序将与创建文件的顺序密切相关,通过文件删除和可能重新使用现在空的目录条目槽来修改.这是因为FAT目录(就像在许多unix文件系统上一样)只是一个固定大小的目录条目结构的打包数组,以及一个丑陋的黑客,用于将用Unicode编写的长文件名拟合到为ASCII编写的8.3名称设计的目录结构中.与Unix不同,需要Win32 API调用来读取目录条目,但这不会影响条目的读取顺序.

在NTFS上(据我所知),目录在B-Tree的某个变体中表示,因此Win32 API看到的文件的自然顺序与该数据结构的自然索引相关.

您可以DIR在命令提示符下看到与命令的差异.在FAT32卷上,DIR显示文件的顺序与将同一文件夹复制到NTFS卷时的顺序不同.DIR /ON无论使用何种基础文件系统,都应按相同顺序列出文件.

DIR生成的未排序顺序与按名称排序时Windows资源管理器生成的顺序相同.(就此而言,DIR /ON也不一样.)

Windows资源管理器使用与大小写无关的排序,它似乎也忽略了排序中的一些标点符号,并试图使数字变得聪明.特别是,简单地使用qsort()with stricmp()将不会得到与Explorer相同的答案.目前尚不清楚Explorer或DIR使用的实际排序顺序是否记录在任何地方.

例如,以下名称在DIR中排序如下:

C:\temp\test> dir/on/b
aoli.txt
a-one.txt
atwo.txt
b1.txt
b10.txt
b2.txt
b-20.txt
b21.txt
b3.txt
b-4.txt

但是从资源管理器中转录,在"名称"列中排序,它们按以下顺序排列:

aoli.txt
a-one.txt
atwo.txt
b1.txt
b2.txt
b3.txt
b10.txt
b21.txt
b-4.txt
b-20.txt

我无法想象在比较函数中应用简单来获得后者的效果.

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有