Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Список файлов


Автор: Garry 26.3.2002, 22:24
Как получить список файлов в текущем каталоге???

Автор: TwoK 26.3.2002, 22:29
Админ, не пора ли faq-страницу создать на нашем форуме?

Отвечаю 4-й раз. Первые 3 благополучно умерли вместе со старым форумом, поэтому отвечаю еще раз :D

Код

//эта штука ищет сначала все файлы по маске mask в папке path,
//а затем во всех подпапках

#include <winbase.h>  //если не ошибаюсь, посмотри в help

void FindDir(char* path,char* mask)
{
   WIN32_FIND_DATA wfnd;
   HANDLE hfound;
   char newpath[MAX_PATH];
   char fpath[MAX_PATH];
   strcpy(fpath,path);
   strcat(fpath,"\\");
   strcat(fpath,mask);
   if(hfound=FindFirstFile(fpath,wfd))
   {
           if(!(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)&&strcmp(wfd.cFileName,"..")&&strcmp(wfd.cFileName,"."))
           {
//значит нашли первый файл в папке path
//и делаем что-нибудь
           }
           while(FindNextFile(hfound,wfd))
           {
               if(!(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)&&strcmp(wfd.cFileName,"..")&&strcmp(wfd.cFileName,"."))
               {
           //значит нашли еще файл в папке path
   //и делаем что-нибудь
               }
           }
   }
   FindClose(hfound);//поиск файлов закончили, теперь ищем подпапки
   strcpy(fpath,path);
   strcat(fpath,"\\*.*");
   if(hfound=FindFirstFile(fpath,wfd))
   {
           if((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)&&strcmp(wfd.cFileName,"..")&&strcmp(wfd.cFileName,"."))
           {
strcpy(newpath,path);
strcat(newpath,"\\");
strcat(newpath,wfd.cFileName);
FindDir(newpath,mask); //ЭТО НАЗЫВАЕТСЯ "РЕКУРСИЯ"
           }
           while(FindNextFile(hfound,wfd))
           {
           if((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)&&strcmp(wfd.cFileName,"..")&&strcmp(wfd.cFileName,"."))
           {
strcpy(newpath,path);
strcat(newpath,"\\");
strcat(newpath,wfd.cFileName);
FindDir(newpath,mask); //ЭТО НАЗЫВАЕТСЯ "РЕКУРСИЯ"
           }
           }
   }
}


Вот.

Автор: Dicobraz 28.3.2002, 14:42
на самом деле, можно немного проще.
1. упростить алгоритм (писать лень, сорри)
2. использовать CFileDialog (VC++) :).

В зависимости от задачи. Так что конкретнее, КОНКРЕТНЕЕ!

Автор: AI0 7.1.2008, 17:31
А как, например, с ними работать в *nix-ах?
Например я хочу чтобы программа в текущем каталоге искала файлы с определённым расширением, например *.jpg, а потом записывала все их названия в массив, а дальше сам разберусь(если получится smile ). 

Вот ещё нескромный вопрос:
Что означает двойная звёздочка?
char **vasia

Автор: warmonger_ 7.1.2008, 18:15
юзай http://www.opengroup.org/onlinepubs/007908799/xsh/dirent.h.html

Автор: JackYF 7.1.2008, 20:24
Цитата(AI0 @  7.1.2008,  16:31 Найти цитируемый пост)
char **vasia 

указатель на указатель. Читай учебник по С++.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)