我正在尝试计算给定路径上的目录数量,但由于某种原因它似乎无法正常工作。
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++;
}
}
我是一名优秀的程序员,十分优秀!