Необходимо удалить каталоги из списка файлов в C - PullRequest
0 голосов
/ 24 ноября 2010

У меня проблема в том, что мне нужно получить список файлов в каталоге. Используя предыдущий вопрос StackOverflow в качестве основы, в настоящее время я получил этот код:

void get_files(int maxfiles) {
    int count = 0;
    DIR *dir;
    struct dirent *ent;
    dir = opendir(DIRECTORY);
    if (dir != NULL) {

        /* get all the files and directories within directory */
        while ((ent = readdir(dir)) != NULL) {
            if (count++ > maxfiles) break;

            printf("%s\n", ent->d_name);
        }
        closedir(dir);
    } else {
        /* could not open directory */
        printf("ERROR: Could not open directory");
        exit(EXIT_FAILURE);
    }
}

Теперь он работает почти так же, как я этого хочу, но проблема в том, что он также перечисляет каталогов с файлами, а мне нужны только записи в файлах. Есть ли легкая модификация, которую я могу сделать, чтобы сделать это?

Ответы [ 3 ]

3 голосов
/ 24 ноября 2010

Вы можете фильтровать каталоги, используя код, похожий на этот

2 голосов
/ 24 ноября 2010

POSIX определяет fstat, который можно использовать для проверки, является ли файл каталогом.Также имеется макрос для упрощения проверки.
http://linux.die.net/man/2/fstat
Обратите внимание, что для Windows вам, возможно, придется использовать Windows API здесь.

0 голосов
/ 24 ноября 2010

Если ваш struct dirent содержит нестандартный, но широко доступный элемент d_type, вы можете использовать его для фильтрации каталогов. Стоит иметь возможность использовать его и возвращаться к stat только в тех системах, которые этого не делают, поскольку использование d_type вместо stat может привести к тому, что список каталогов будет в десятки или сотни раз быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...