我试图计算给定路径上的目录数量,但由于某种原因它似乎无法正常工作。
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文件。
我在其他文件上尝试了这个并且它似乎有效,但由于某些原因我不能在我应该使用它的特定目录上工作,我无法思考为什么。
答案 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++;
}
}