Получение списка файлов в папке с помощью C - PullRequest
5 голосов
/ 24 октября 2010

У меня есть путь к папке, например

/ моя_папка

или в Windows:

C: \ моя_папка

и я хочу получить список всех файлов в этой папке. Как мне это сделать в C?

Отличается ли он в C ++ или C99?

Как получить список его папок?

Любая помощь приветствуется.

Ответы [ 5 ]

4 голосов
/ 04 ноября 2010

Вы можете использовать функции, объявленные в dirent.h

dirent.h - это заголовок в библиотеке C POSIX для языка программирования C, который содержит конструкции, облегчающие работу каталогаобходе.Функция не является частью стандарта C, но считается «псевдостандартом» и обычно переносима между платформами.
http://en.wikipedia.org/wiki/Dirent.h

#include <dirent.h>

int main(int argc, char **argv)
{
    DIR *dir;
    struct dirent *de;

    dir = opendir("."); /*your directory*/
    while(dir)
    {
        de = readdir(dir);
        if (!de) break;
        printf("%i %s\n", de->d_type, de->d_name);
    }
    closedir(dir);
    return 0;
}
4 голосов
/ 24 октября 2010

В операционных системах POSIX вы можете вызывать opendir () и readdir ().В Windows вы можете вызывать _findfirst () и _findnext ().Приложив немного усилий, вы можете реализовать свои собственные opendir () и readdir () как функции-оболочки в Windows, чтобы код вашего приложения мог использовать один и тот же API везде.Пример этого можно найти здесь .

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

Лучший подход в C ++ - использовать файловую систему boost.

Что касается C, вам потребуется API платформы (POSIX / WinAPI).

Документация POSIX + пример: http://www.opengroup.org/onlinepubs/009695399/functions/readdir.html

1 голос
/ 24 декабря 2013

Обратите внимание на get_all_files_within_folder(), который я написал на C / C ++ здесь , на который я ответил на вопрос, аналогичный вашему. Это прекрасно работает для меня. Надеюсь, это поможет.

0 голосов
/ 25 октября 2010

Это классическая задача, одно из возможных решений которой можно найти в Kernigan & Ritchie - Язык программирования Си (Глава 8.6). Суть задачи - рекурсивный обход целевой папки и ее подпапок.

...