gpt4 book ai didi

c - 用于目录和访问子目录中的文件的 Open() 系统调用

转载 作者:行者123 更新时间:2023-11-30 16:24:23 27 4
gpt4 key购买 nike

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

关于c - 用于目录和访问子目录中的文件的 Open() 系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53683924/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com