fre*_*ker 14 c linux directory
这是在C中检查目录是否为空的正确方法吗?有没有更有效的方法来检查空目录,特别是如果它有1000个文件,如果不是空的?
int isDirectoryEmpty(char *dirname) {
int n = 0;
struct dirent *d;
DIR *dir = opendir(dirname);
if (dir == NULL) //Not a directory or doesn't exist
return 1;
while ((d = readdir(dir)) != NULL) {
if(++n > 2)
break;
}
closedir(dir);
if (n <= 2) //Directory Empty
return 1;
else
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果它是一个空目录,readdir
将在条目''后停止.和'..'因此如果是空的n<=2
.
如果它为空或不存在,则应返回1,否则返回0
更新:
@c$ time ./isDirEmpty /fs/dir_with_1_file; time ./isDirEmpty /fs/dir_with_lots_of_files
0
real 0m0.007s
user 0m0.000s
sys 0m0.004s
0
real 0m0.016s
user 0m0.000s
sys 0m0.008s
Run Code Online (Sandbox Code Playgroud)
为什么与只有一个文件的文件相比,检查包含大量文件的目录需要更长时间?
是否有更有效的方法来检查空目录,特别是如果它有1000个文件,如果不是空的话
编写代码的方式与它有多少文件无关(break
如果n> 2).所以你的代码最多使用5个调用.我认为没有办法(便携)让它更快.
归档时间: |
|
查看次数: |
15182 次 |
最近记录: |