我试图打开一个目录并访问其所有文件和子目录,以及子目录文件,等等(递归)。 我知道我可以通过使用opendir调用来访问文件和子目录,但是我想知道是否有一种方法可以通过使用open()系统调用(以及如何执行)来完成,或者是通过开放系统调用来实现?只指文件?
#include <stdio.h>
#include <dirent.h>
int main(void)
{
struct dirent *de; // Pointer for directory entry
// opendir() returns a pointer of DIR type.
DIR *dr = opendir(".");
if (dr == NULL) // opendir returns NULL if couldn't open directory
{
printf("Could not open current directory" );
return 0;
}
while ((de = readdir(dr)) != NULL)
printf("%s\n", de->d_name);
closedir(dr);
return 0;
}
以下代码为我提供了目录中文件的名称以及子文件夹的名称,但是如何将文件与子文件夹区分开来,所以我可以使用递归来访问子文件夹中的文件文件夹?
任何帮助将不胜感激
答案 0 :(得分:0)
您将需要具有struct stat和宏S_ISDIR,如果要检查它是否是文件,可以使用相同的方法,但要使用宏S_ISREG。 同样,当您使用结构时,最好在使用它们之前先分配内存。
#include <stdio.h>
#include <dirent.h>
#include <sys/stat.h>
int main(void)
{
struct dirent *de = malloc(sizeof(struct dirent)); // Pointer for directory entry
struct stat *info; = malloc(sizeof(struct stat));
// opendir() returns a pointer of DIR type.
DIR *dr = opendir(".");
if (dr == NULL) // opendir returns NULL if couldn't open directory
{
printf("Could not open current directory" );
return 0;
}
while ((de = readdir(dr)) != NULL)
{
if((S_ISDIR(info->st_mode)
printf("Directory:%s \n", de->d_name);
else printf("File:"%s \n,de->d_name);
}
closedir(dr);
return 0;
}