C/C++实现遍历文件夹最全方法总结
在C/C++中,我们经常需要遍历文件夹,以实现文件操作、文件查找等功能。以下是几种常见的遍历文件夹的方法:
方法一:使用ftw()函数
ftw()函数(full name: file tree walk)位于头文件ftw.h中,可以遍历一个目录下的所有文件。使用该函数需要传入一个回调函数,告诉ftw()函数遍历文件时应该进行怎样的操作。
下面是通过ftw()函数遍历目录并输出目录下所有文件路径的示例:
#include <ftw.h>
#include <stdio.h>
int file_callback(const char *file_path, const struct stat *info, int typeflag)
{
if (typeflag == FTW_F)
{
printf("%s\n", file_path);
}
return 0;
}
int main(int argc, char **argv)
{
if (argc < 2)
{
printf("Usage: %s <dir>\n", argv[0]);
return -1;
}
if (ftw(argv[1], file_callback, 10) == -1)
{
perror("ftw");
}
return 0;
}
方法二:使用opendir()函数
opendir()函数可以打开一个文件夹,返回一个指向DIR结构体的指针。接着我们可以使用readdir()函数遍历该文件夹下所有文件,直至遍历结束。注意:readdir()函数只能读取文件夹中的文件名,无法读取文件的详细信息。
以下是通过opendir()函数遍历目录并输出目录下所有文件路径的示例:
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <sys/stat.h>
#include <string.h>
void traverse_dir(const char *dir_path)
{
char path[1024];
DIR *dir = opendir(dir_path);
if (dir == NULL) return;
struct dirent *dp;
while ((dp = readdir(dir)) != NULL)
{
if (strcmp(dp->d_name, ".") == 0 || strcmp(dp->d_name, "..") == 0) continue;
sprintf(path, "%s/%s", dir_path, dp->d_name);
if (dp->d_type == DT_DIR)
{
traverse_dir(path);
}
else if (dp->d_type == DT_REG)
{
printf("%s\n", path);
}
}
closedir(dir);
}
int main(int argc, char *argv[])
{
if (argc < 2)
{
printf("Usage: %s <dir>\n", argv[0]);
return -1;
}
traverse_dir(argv[1]);
return 0;
}
以上是两种常用的遍历文件夹的方法,读者可以根据自己的需求选择合适的方法。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C/C++实现遍历文件夹最全方法总结 - Python技术站