Является ли это правильным способом проверки, является ли каталог пустым или нет в 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;
}
Если его пустой каталог, readdir
остановится после записей '.' и '..' и, следовательно, пусто, если n<=2
.
Если он пуст или не существует, он должен возвращать 1, else возвращает 0
Update:
@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
Почему требуется больше времени для проверки каталога с большим количеством файлов по сравнению с одним только с одним файлом?