Си: проверить директорию - пуста ли она
Как проверить директорию - пуста ли она?
Как проверить директорию - пуста ли она?
Самый простой способ - открыть каталог opendir'ом и посчитать количество файлов/папок в нем. На самом деле даже делать подсчет не нужно - если хоть один файл есть - не пустая. Будет работать под линуксом и макосью. Для примера, можно на SO посмотреть.
Например, так (проверки на корректность аргументов и opendir() опущены):
#include <stdio.h>
#include <dirent.h>
#include <string.h>
int
main(int argc, char *argv[])
{
DIR * dir;
struct dirent * dirent;
int files_found = 0;
dir = opendir( argv[1] );
while( dirent = readdir(dir) )
{
if( strcmp(dirent->d_name, ".") || strcmp(dirent->d_name, "..") )
{
files_found = 1;
break;
}
}
closedir( dir );
printf( "Directory \"%s\" is%s empty\n", argv[1], files_found ? " NOT" : "" );
return files_found;
}
В заголовочном файле dirent.h
объявлены функции, позволяющие получать информацию о директориях: opendir
и readdir
.
Функция opendir
принимает путь к директории и возвращает указатель на список с информацией о содержимом директории, который можно последовательно перебирать с помощью команды readdir
. Когда список заканчивается, readdir
возвращает NULL
. Даже в пустой директории есть поддиректории .
и ..
. Если в директории только они, то она пуста.