Си: проверить директорию - пуста ли она

Рейтинг: 0Ответов: 3Опубликовано: 22.04.2015

Как проверить директорию - пуста ли она?

Ответы

▲ 1Принят

Самый простой способ - открыть каталог opendir'ом и посчитать количество файлов/папок в нем. На самом деле даже делать подсчет не нужно - если хоть один файл есть - не пустая. Будет работать под линуксом и макосью. Для примера, можно на SO посмотреть.

▲ 4

Например, так (проверки на корректность аргументов и 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;
}
▲ 1

В заголовочном файле dirent.h объявлены функции, позволяющие получать информацию о директориях: opendir и readdir.

Функция opendir принимает путь к директории и возвращает указатель на список с информацией о содержимом директории, который можно последовательно перебирать с помощью команды readdir. Когда список заканчивается, readdir возвращает NULL. Даже в пустой директории есть поддиректории . и ... Если в директории только они, то она пуста.