2010-10-24 1 views
5

У меня есть путь к папке, напримерПолучение списка файлов в папке с помощью C

/MyFolder

или в Windows:

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

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

Различия в C++ или C99?

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

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

+2

Этот вопрос не имеет ничего общего с C или C++, но с операционной системой, которую вы используете. Пожалуйста, уточните. –

+0

@Jens Uh? Где вы видите двусмысленность? Плюс он имеет много общего с C или C++. –

+3

C как язык имеет IO на файлы, но даже не знает концепции каталогов. Каталоги - это концепция ОС, поэтому, чтобы сказать что-нибудь полезное, чтобы ответить на этот вопрос, вам нужно знать ОС. –

ответ

4

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

0

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

+0

Почему это проголосовало? Ответ * есть * в этой главе в этой книге.Думаю, это было пропущено, потому что сначала вам нужно иметь копию? http://www.amazon.co.uk/C-Programming-Language-2nd/dp/0131103628 Это серьезно стоит покупать, если вы учитесь C. –

+0

@GaryWilloughby: Это юбки очень близко к тому, где K & R 2 показывает свой возраст. В главе есть функция 'dirwalk()', которая может быть использована. Почти сразу после этого есть примерная реализация 'opendir()', 'readdir()', 'closedir()', которая бесполезна для любой существующей системы Unix, но которая использовалась для работы в 80-х и начале 90-х годов. (Я не уверен точно, когда он перестает работать, это зависит от платформы, частично, но большинство POSIX-ish O/S переместилось на «вы должны использовать наш' opendir() 'et al и не можете использовать тот из K & R 2 больше ", скажем, 2005, и, вероятно, довольно много раньше.) –

+0

Я сказал:' 'dirwalk()' is useable '. Это требует некоторых небольших настроек, чтобы сделать его пригодным для использования с стандартом POSIX 'opendir()' et al. Тип 'Dirent' должен стать' struct dirent' (или вам нужно добавить 'typedef struct dirent Dirent;'), а ссылки на 'dp-> name' должны быть изменены на' dp-> d_name'. –

4

Вы можете использовать функции, объявленные в 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; 
} 
1

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