无法扫描目录以使文件出现

Can't scan directory in order that files appear

我正在尝试对可以包含子文件夹的文件夹执行 DFS。目标是从目录中找到所有 .txt 文件。我需要按照 DFS 找到它们的顺序找到 .txt 文件并保留文件夹中文件的顺序。

目前我扫描目录的代码使用scandir()函数:

int n = scandir(path, &namelist, NULL, alphasort);

这按字母顺序对文件夹中的文件进行排序,这不是我想要的。

编辑:我试过使用 opendir() 和 readdir() 但这是以看似随机的顺序访问文件。

根据versionsort man page

int versionsort(const void *a, const void *b);

可以作为回调传递给 scandir() 并在 dirent.h 中声明。


首先要检查的是:“功能测试宏要求”

来自上面链接的同一页面:

Feature Test Macro Requirements for glibc (see feature_test_macros(7)):

scandir(), alphasort(): _BSD_SOURCE || _SVID_SOURCE

versionsort(): _GNU_SOURCE.

这些宏需要在 dirent.h 包含之前定义以启用特定功能。


要检查的第二件事:glibc 版本

来自上面链接的同一页面:

Versions

versionsort() was added to glibc in version 2.1.

请参阅 this question 了解如何检查您的 glibc 版本。