由于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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)