我正在尝试编写一个函数,该函数返回当前文件夹及其所有子文件夹中所有文件的列表。我写了这段代码:
#include <iostream>
#include <dirent.h>
#include <cstring>
using namespace std;
int main() {
DIR* dir; dirent* pdir;
//From my workspace
dir=opendir(".");
while (pdir=readdir(dir)) {
if(/**********This pdir is a directory**********/) {
/**********RECURSIVE CALL SHOULD BE HERE**********/
cout<<pdir->d_name<<endl;
}
}
closedir(dir);
return 0;
}
我在谷歌搜索它,但我不知道如何:
- 检查当前
pdir
是否为目录 - 进入目录并对其执行递归调用
同时,我在 main 上有一切,因为我仍然不知道递归函数应该有什么参数。
有什么提示吗?
原文由 Maroun 发布,翻译遵循 CC BY-SA 4.0 许可协议
在将基目录路径作为参数的过程中隔离该代码,以便您可以实际执行递归调用。它应该是这样的
然后,检查你获得的
pdir
是否是一个目录,你有两条路线:pdir->d_type==DT_DIR
;这会立即为您提供此信息,但它不可移植(POSIX 不要求存在d_type
成员);此外,并非所有文件系统都支持它,因此您可能会得到DT_UNKNOWN
。如果你想遵循符号链接,如果你得到DT_LNK
,你也必须执行额外的检查。在这些情况下,您必须回退到lstat
(见下文);lstat
来获取有关每个文件的信息,特别是检查st_mode
字段struct stat
。