Open()系统调用目录并访问子目录中的文件

时间:2018-12-08 15:21:14

标签: c directory system-calls opendir

我试图打开一个目录并访问其所有文件和子目录,以及子目录文件,等等(递归)。 我知道我可以通过使用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; 
 } 

以下代码为我提供了目录中文件的名称以及子文件夹的名称,但是如何将文件与子文件夹区分开来,所以我可以使用递归来访问子文件夹中的文件文件夹?

任何帮助将不胜感激

1 个答案:

答案 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; 
}