由于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;
}
版权声明:本文为qq_45164331原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。