" dirCount"工作不正常

时间:2018-03-10 04:21:09

标签: 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文件。

我在其他文件上尝试了这个并且它似乎有效,但由于某些原因我不能在我应该使用它的特定目录上工作,我无法思考为什么。

1 个答案:

答案 0 :(得分:0)

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

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++;
                }
 }