¿Es esta la manera correcta de verificar si un directorio está vacío o no en C? ¿Hay una manera más eficiente de verificar si hay un directorio vacío, especialmente si tiene miles de archivos si no están vacíos?Compruebe si un directorio está vacío usando C en Linux
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;
}
Si es un directorio vacío, readdir
se detendrá después de las entradas '' y '..' y por lo tanto vacío si n<=2
.
Si su vacío o no existe, debe devolver 1, el retorno demás 0
Actualización:
@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
¿Por qué se necesita más tiempo para comprobar si hay un directorio con una gran cantidad de archivos en comparación a uno con solo un archivo?
Lea mi edición, ¿por qué tarda más en ejecutarse el mismo código en un directorio con muchos archivos en comparación con uno con solo un archivo? – freethinker
@freethinker No estoy seguro. Haz un "strace" y muéstranos eso. – cnicutar
agregó las estrategias – freethinker