获取一个文件夹下的所有文件及其子目录的文件名可以通过递归遍历文件夹来完成。以下是几个示例代码,演示如何实现这个功能。
方法一:使用C++17中的std::filesystem
基于C++17标准,可以使用std::filesystem库来遍历目录。下面是示例代码:
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
void walk_directory(const fs::path& path) {
for (const auto& entry : fs::directory_iterator(path)) {
if (entry.is_directory()) {
walk_directory(entry.path());
} else {
std::cout << entry.path() << std::endl;
}
}
}
int main() {
walk_directory("/path/to/directory");
return 0;
}
上述代码定义了一个函数walk_directory
,用于遍历指定目录下的所有文件和子目录。如果遍历到的是子目录,则递归遍历子目录,否则输出文件名。
方法二:使用C语言和POSIX标准库
如果不支持C++17或者希望使用C语言实现,可以使用POSIX标准库中的dirent.h
头文件。下面是示例代码:
#include <stdio.h>
#include <dirent.h>
#include <string.h>
void walk_directory(const char *dir) {
DIR *dp;
struct dirent *entry;
if ((dp = opendir(dir)) == NULL) {
fprintf(stderr, "Cannot open directory: %s\n", dir);
return;
}
chdir(dir);
while ((entry = readdir(dp)) != NULL) {
if (entry->d_type == DT_DIR) {
if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) {
continue;
}
printf("%*s[%s]\n", 4, "", entry->d_name);
char subdir[1024];
snprintf(subdir, sizeof(subdir), "%s/%s", dir, entry->d_name);
walk_directory(subdir);
} else {
printf("%*s- %s\n", 4, "", entry->d_name);
}
}
chdir("..");
closedir(dp);
}
int main() {
walk_directory("/path/to/directory");
return 0;
}
上述代码实现了遍历指定目录下的所有文件和子目录,并输出它们的相对路径。如果遇到子目录,则递归遍历子目录。需要注意的是,这种方法需要手动改变当前工作目录,同时也无法返回文件的绝对路径。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解C/C++如何获取路径下所有文件及其子目录的文件名 - Python技术站