gpt4 book ai didi

c - 如何仅计算路径中的目录数

转载 作者:太空宇宙 更新时间:2023-11-04 03:30:38 30 4
gpt4 key购买 nike

我试图只计算路径中的目录,但它不起作用。所以,我不想给文件和目录都编号,我只想要目录。请问你能帮帮我吗?代码:

int listdir(char *dir) {
struct dirent *dp;
struct stat s;
DIR *fd;
int count = 0;

if ((fd = opendir(dir)) == NULL) {
fprintf(stderr, "listdir: can't open %s\n", dir);
}
while ((dp = readdir(fd)) != NULL) {
if (!strcmp(dp->d_name, ".") || !strcmp(dp->d_name, ".."))
continue;
stat(dp->d_name, &s);
if (S_ISDIR(s.st_mode))
count++;
}
closedir(fd);
return count;
}

最佳答案

您的 stat() 调用将失败,因为您不在正确的目录中。这可以通过更改当前目录或生成完整路径并将 stat 作为参数提供来解决。

某些 Unix,您可以通过查看 struct dirent 和 d_type 字段来优化统计调用

int listdir(char *dir) {
struct dirent *dp;
struct stat s;
DIR *fd;
int count = 0;

if ((fd = opendir(dir)) == NULL) {
fprintf(stderr, "listdir: can't open %s\n", dir);
}
chdir (dir); /* needed for stat to work */
while ((dp = readdir(fd)) != NULL) {
if (!strcmp(dp->d_name, ".") || !strcmp(dp->d_name, ".."))
continue;
#ifdef _DIRENT_HAVE_D_TYPE
switch (dp->d_type)
{
case DT_UNKNOWN:
stat(dp->d_name, &s);
if (S_ISDIR(s.st_mode)) count++;
break;
case DT_DIR:
count++;
break;
}
#else
stat(dp->d_name, &s);
if (S_ISDIR(s.st_mode)) count++;
#endif
}
closedir(fd);
return count;
}

关于c - 如何仅计算路径中的目录数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36896850/

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