【发布时间】:2010-12-18 13:48:01
【问题描述】:
我在 C 中使用 dirent 和 stat 获得了文件和文件夹列表,但它们不是我想要的顺序。我希望它首先列出目录,然后列出文件。 例如:
.
..
[dir1]
[dir2]
[file1]
[file2]
有没有办法用 dirent 做到这一点?或者我不想手动订购输出列表。 谢谢。
【问题讨论】:
我在 C 中使用 dirent 和 stat 获得了文件和文件夹列表,但它们不是我想要的顺序。我希望它首先列出目录,然后列出文件。 例如:
.
..
[dir1]
[dir2]
[file1]
[file2]
有没有办法用 dirent 做到这一点?或者我不想手动订购输出列表。 谢谢。
【问题讨论】:
如果您使用 opendir/readdir,则必须对它们进行排序,但如果您想获取所有目录,则可以使用 scandir(3)(假设您在 *nix 系统上)条目已排序。
【讨论】:
两次通过目录,第一次只显示目录,第二次只显示文件。如果您只想要 dirs-then-files,我只会这样做;如果您有一些详细的排序标准,我会将条目存储在一个数组中并使用自定义排序函数对其进行排序。
【讨论】:
您需要阅读它们并自行排序。或者使用一个不同的库函数来为你做这件事。
【讨论】:
您可以维护两种数据结构,一种用于目录,一种用于文件。 一旦开始使用 dirent 读取目录,插入相应的结构运行时。
最后将两个列表分别与目录和文件合并。 此方法将在 O(N) 一次通过后完成,合并只需要一条指令,即 O(1)。
【讨论】: