Linux系统编程之readdir()函数判断目录是否为空的问题

it2024-11-19  10

由于Linux目录中总是存在”.“、”.“两个隐藏目录,所以在用readdir()函数判断是否为空时,得到的结果总是目录不为空。但是现实中对于如果目录中没有自己的文件就应该被判为空,所以在多次测试之后得到下面这段判断目录是否为空的方法。 第一种代码:

#include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<fcntl.h> #include<string.h> #include<dirent.h> int main(){ //与文件一样,读目录前也要先打开目录 DIR* dir = opendir("./hah"); if(dir == NULL){ perror("打开目录失败"); exit(1); } struct dirent *ptr = NULL; while((ptr=readdir(dir)) != NULL){ if(strcmp(".",ptr->d_name)!=0 && strcmp("..",ptr->d_name)!= 0) { printf("目录不为空\n"); break; } } if(ptr == NULL){ printf("目录为空\n"); } return 0; }

第二种代码:

#include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<fcntl.h> #include<string.h> #include<dirent.h> int main(){ //与文件一样,读目录前也要先打开目录 DIR* dir = opendir("./hah"); if(dir == NULL){ perror("打开目录失败"); exit(1); } struct dirent *ptr = NULL; while((ptr=readdir(dir)) != NULL){ if(strcmp(".",ptr->d_name)!=0 || strcmp("..",ptr->d_name)!= 0) { continue; } printf("目录不为空\n"); } return 0; }

第三种代码:

#include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<fcntl.h> #include<string.h> #include<dirent.h> int main(){ //与文件一样,读目录前也要先打开目录 DIR* dir = opendir("./hah"); if(dir == NULL){ perror("打开目录失败"); exit(1); } struct dirent *ptr = NULL; while((ptr=readdir(dir)) != NULL){ if(strcmp(".",ptr->d_name)!=0 && strcmp("..",ptr->d_name)!= 0) { break; } } if(ptr == NULL){ printf("目录为空\n"); }else{ printf("目录不为空\n"); } return 0; }
最新回复(0)