c - "dirCount"工作不正常

标签 c linux directory

我正在尝试计算给定路径上的目录数量,但由于某种原因它似乎无法正常工作。

DIR *dir;       //directory to read from
struct dirent *dr;  //directory entry
int dirCount = 0;   //count of subdirectories in directory

if(path == NULL)
{
    perror("path = null");
    exit(EXIT_FAILURE);
}

if(chdir(path) == -1)
{
    perror("chdir failed");
    exit(EXIT_FAILURE);
}

if((dir = opendir(path)) == NULL) //open directory
{
    perror("opendir() error");
    exit(EXIT_FAILURE);
}

while((dr = readdir(dir)) != NULL)  //loop to check if leaf
{
    while((strcmp(dr -> d_name, ".") == 0 || strcmp(dr ->  d_name, "..") == 0) && dr != NULL)   //skip "." and ".."
    {
        dr = readdir(dir);
    }

    if(dr -> d_type == DT_DIR)
    {
        dirCount++;
    }
}
return dirCount;
}

这是代码,但似乎当我在家庭作业的某个文件上运行它时(即使路径中只有 1 个 .txt 文件)它总是返回 2,我不确定为什么.在同一个文件上使用 ls -la 时,它只输出“.”、“..”和 .txt 文件。

我已经在其他文件上尝试过它,它似乎可以工作,但由于某种原因不适用于我应该在其上使用它的特定目录,我想不出为什么。

最佳答案

按照其他人的建议,在检查 dr->d_name 之前检查 dr!=NULL 条件。您可以使用 if 语句代替第二个 while 循环

while((dr = readdir(dir)) != NULL) {    
                if(dr!=NULL && (strcmp(dr -> d_name, ".") == 0 || strcmp(dr ->  d_name, "..") == 0)) {
                        dr = readdir(dir);
                        continue;
                }
                if(dr -> d_type == DT_DIR) {
                        dirCount++;
                }
 }

关于c - "dirCount"工作不正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49205292/

相关文章:

C - 像多维数组一样使用字符指针数组是否会修改存储的数据?

c - 在整数数组中找到最大的对和

php - PHP 内存泄漏工具?使用灯

iphone - 遍历iphone中文件夹的所有子文件夹

java - 寻找以前的工作目录来实现 "cd -"

c - 我正在使用 4 个 for 循环,2 个工作正常,其余 2 个显示问题 3,4 个循环显示无效答案

c - `atoi` 这个名字是从哪里来的?

c++ - 使用C++执行脚本

regex - 使用 awk 返回相应的列

android - 如何更改SD卡默认保存文件夹?