Open() 系统调用目录和访问子目录中的文件
Open() system call for directories and accessing files in sub-directories
我试图打开一个目录并访问它的所有文件和子目录以及子目录文件等等(递归)。
我知道我可以使用 opendir 调用访问文件和子目录,但我想知道是否有办法通过使用 open() 系统调用(以及如何?),或者 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;
}
下面的代码给出了目录中文件的名称和子文件夹的名称,但是如何区分文件和子文件夹以便我可以使用递归来访问目录中的文件子文件夹?
如有任何帮助,我们将不胜感激
您将需要 中的 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;
}
我试图打开一个目录并访问它的所有文件和子目录以及子目录文件等等(递归)。 我知道我可以使用 opendir 调用访问文件和子目录,但我想知道是否有办法通过使用 open() 系统调用(以及如何?),或者 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;
}
下面的代码给出了目录中文件的名称和子文件夹的名称,但是如何区分文件和子文件夹以便我可以使用递归来访问目录中的文件子文件夹?
如有任何帮助,我们将不胜感激
您将需要 中的 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;
}