无法扫描目录以使文件出现
Can't scan directory in order that files appear
我正在尝试对可以包含子文件夹的文件夹执行 DFS。目标是从目录中找到所有 .txt
文件。我需要按照 DFS 找到它们的顺序找到 .txt
文件并保留文件夹中文件的顺序。
目前我扫描目录的代码使用scandir()
函数:
int n = scandir(path, &namelist, NULL, alphasort);
这按字母顺序对文件夹中的文件进行排序,这不是我想要的。
编辑:我试过使用 opendir() 和 readdir() 但这是以看似随机的顺序访问文件。
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 版本。
我正在尝试对可以包含子文件夹的文件夹执行 DFS。目标是从目录中找到所有 .txt
文件。我需要按照 DFS 找到它们的顺序找到 .txt
文件并保留文件夹中文件的顺序。
目前我扫描目录的代码使用scandir()
函数:
int n = scandir(path, &namelist, NULL, alphasort);
这按字母顺序对文件夹中的文件进行排序,这不是我想要的。
编辑:我试过使用 opendir() 和 readdir() 但这是以看似随机的顺序访问文件。
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 版本。