Аватар для Vovik_0_1
40 / 40 / 6
Регистрация: 28.07.2011
Сообщений: 431

Список файлов в папке и её подпапках

28.06.2012, 21:23. Показов 16492. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет всем скажите пожалуйста как получить список файлов в папке и её подпапках и подпапках папок этих подпапок вот такая вот муть))
Вот что смог.. Получаю список файлов в папке и её папках. И всё дальше не идёт.. Что делать подскажите!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void Poisk(TStringList *sp,AnsiString put)
{
  TSearchRec f;  //О работе с TSearchRec можете где-нибудь прочитать сами
  AnsiString Path = "C:\\"+put+"\\*.*";
  TSearchRec sr;
  int done = FindFirst( Path, faAnyFile, sr );
  while(!done) {
  if ( sr.Name != "." || sr.Name != ".." ) sp->Add(sr.Name);
    done = FindNext(sr);
  }
  FindClose(sr);
    return ;
}
Вызываю так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TStringList*sp=new TStringList;
  Poisk(sp,"");
  for(int i=0;i<sp->Count;i++) {  //Проходимся циклом по всему списк
     if (sp->Strings[i].Pos(".")== false){
      Poisk(sp,sp->Strings[i].c_str());
     }
  }
  sp->SaveToFile("log.ant");
  delete sp;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.06.2012, 21:23
Ответы с готовыми решениями:

Поместить список файлов в папке в ListBox
как в Listbox запихнуть список файлов *.bmp из выбранной папки?? как на...

Как отобразить список файлов с разширением в указанной папке?
Собственно сабж... нужно сделать некий сканер папок на предмет файлов, допустим *.jpg В каком направлении двигаться? Добавлено...

Получить список файлов в папке и подпапках
Каким образом получить список файлов в текущей папке приложения и всех подпапках рядом, с учетом доступа? Например: string files =...

12
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
28.06.2012, 22:34
Vovik_0_1,
Цитата Сообщение от Vovik_0_1 Посмотреть сообщение
в папке и её подпапках и подпапках папок этих подпапок
так бахните рекурсию

Вот я тут черновичком накидал:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
void FindFiles(TStringList *sp, AnsiString DirName)
{
TSearchRec sr;
if (DirName.Length())
 {
 if (!FindFirst(DirName+"\\*.*",faAnyFile,sr))
 do
  {
  if (!(sr.Name=="." || sr.Name==".."))
   if (((sr.Attr & faDirectory) == faDirectory ) ||
   (sr.Attr == faDirectory))
    {
    FindFiles(sp, DirName+"\\"+sr.Name);
    }
    else
    {
    sp->Add(DirName+"\\"+sr.Name); 
    //убрать "DirName+"\\"+" для получения имен файлов без полных путей
    }
  }
 while (!FindNext(sr));
 FindClose(sr);
 }
}
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{TStringList *sp =new TStringList;
FindFiles(sp, "C:\\test");
for(int i=0;i<sp->Count;i++) {
     if (sp->Strings[i].Pos(".")== false){
      FindFiles(sp,sp->Strings[i].c_str());
     }
  }
  sp->SaveToFile("log.ant");
  delete sp;
}
2
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
28.06.2012, 22:41
Глянь тут - дерево каталогов. Берем этот анализ и заряжаем рекурсию.
1
 Аватар для Vovik_0_1
40 / 40 / 6
Регистрация: 28.07.2011
Сообщений: 431
29.06.2012, 00:00  [ТС]
Не могу понять в чём дело? Хотел сделать ожидание но толку ноль.. Просто выскакивает готово!. В чём дело?
C++
1
2
3
4
5
6
7
8
9
TStringList *sp =new TStringList;
Form2->Label1->Caption = "Подождите...";
Form2->Caption = "Forum 1.00";
Form2->Show();
::Sleep(1000);
FindFiles(sp, "C:");
  sp->SaveToFile("log.ant");
  delete sp;
   Form2->Label1->Caption = "Готово!";
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
29.06.2012, 00:05
Vovik_0_1,
Цитата Сообщение от Vovik_0_1 Посмотреть сообщение
Хотел сделать ожидание но толку ноль.. Просто выскакивает готово!
Ну пожалуй что не "ноль" и не "просто", а "заморозка" идет на 1000 мсек = 1 секунду, как у Вас и указано => Добавьте нулик.

Ну и за сколько у Вас диск C сканится?
0
Эксперт С++
 Аватар для Avazart
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.06.2012, 00:09
Вот набросок на boost-е ( но тестировал правда на Ubunte)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <iostream>
#include <algorithm>
#include <string>
#include <boost/filesystem.hpp>
#include <boost/regex.hpp>
 
using namespace std;
using namespace boost;
using namespace boost::filesystem;
//---------------------------------
typedef vector<path> vec;
//---------------------------------
void f(path p,const regex& re,vec& v)
{ 
 vec buf;
 copy(directory_iterator(p), directory_iterator(), back_inserter(buf));
 for( vec::iterator i= buf.begin();i!=buf.end();++i)
  {
    if( regex_match(i->filename(),re) )  v.push_back(*i);
    if( is_directory(*i) ) f(*i,re,v); 
  }
}
//---------------------------------
void f2(const vec &dirs,const regex& re,vector<vec>& r)
{
 for(vec::const_iterator i= dirs.begin(); i!=dirs.end(); ++i)
   {
    r.push_back(vec());
    f(*i,re,r.back()); 
   }
}
//---------------------------------
int main(int argc, char* argv[])
{
 string dir1,dir2;
 cout<<"Введите директорию: #1"<<endl; 
 cin.sync();
 getline(cin,dir1);
 path p1 (dir1); 
 
 cout<<"Введите директорию: #2"<<endl; 
 cin.sync();
 getline(cin,dir2);
 path p2 (dir2); 
 
 vec dirs;
 
 dirs.push_back(p1);
 dirs.push_back(p2);
 
 vector<vec> v;     
 
 try
  {
    if (exists(p1) && is_directory(p1) && exists(p2) && is_directory(p2))   
     {               
      regex re("main.*");
 
      f2(dirs,re,v);
        
      for (vector<vec>::const_iterator i1(v.begin()); i1 != v.end(); ++i1)
       {        
       cout<<"-----------------------"<<endl;
       for (vec::const_iterator i2(i1->begin()); i2 != i1->end(); ++i2)   cout << "\t" << i2->filename() << endl;
       }
      } 
    else cout <<" does not exist or does not directory\n";
  }
 catch (const filesystem_error& ex)  { cout << ex.what() << endl;}
 
 return 0;
}
Добавлено через 1 минуту
f() рекурсивный поиск в папке
f2() рекурсивыный поиск по указаному вектору папок
2
 Аватар для Vovik_0_1
40 / 40 / 6
Регистрация: 28.07.2011
Сообщений: 431
29.06.2012, 00:25  [ТС]
Цитата Сообщение от The_Immortal Посмотреть сообщение
Добавьте нулик.
Ну и толку нет(( Форма появляется но пустая тоесть в Лабел не чего нет десять секунд а потом надпись готово! Что за ерунда? И кстати почему
Цитата Сообщение от The_Immortal Посмотреть сообщение
черновичком
Вроде всё норм работает!
0
Эксперт С++
 Аватар для Avazart
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.06.2012, 00:31
А да забыл мой пример ищит файлы по шаблону "main.*" т.е все начинающиеся с "main"
0
 Аватар для Vovik_0_1
40 / 40 / 6
Регистрация: 28.07.2011
Сообщений: 431
29.06.2012, 00:34  [ТС]
Можно ли поставить прогресс бар? Если да то как? Спасибо и вопрос актуален!
Цитата Сообщение от Vovik_0_1 Посмотреть сообщение
Ну и толку нет(( Форма появляется но пустая тоесть в Лабел не чего нет десять секунд а потом надпись готово! Что за ерунда? И кстати почему
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
29.06.2012, 00:36
Vovik_0_1, предлагаю данный вопрос обсудить в отдельно созданной Вами теме
0
Эксперт С++
 Аватар для Avazart
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.06.2012, 00:37
А да как вариант я еще тут прогу свою выкладывал Программа для поиска и удаления файлов
( на WinApi, но очень замутно)
1
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
29.06.2012, 00:39
Avazart,
Цитата Сообщение от Avazart Посмотреть сообщение
на WinAp
да ну нафиг... Хотя, для общего развитие пойдет
0
 Аватар для Vovik_0_1
40 / 40 / 6
Регистрация: 28.07.2011
Сообщений: 431
29.06.2012, 00:39  [ТС]
Цитата Сообщение от The_Immortal Посмотреть сообщение
предлагаю данный вопрос обсудить в отдельно созданной Вами теме
А как назвать? У меня два вопроса и оба на разную тему ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.06.2012, 00:39
Помогаю со студенческими работами здесь

Как получить список файлов в папке и подпапках
1.Как получить список файлов в выбранной папке и в её подпапках вот в таком вот виде? \Folder\Файл.txt ...

Записать в файл список найденных в указанной папке и подпапках файлов меньших указанного размера
Пользователь вводит адрес папки и размер в байтах. Программа записывает в результирующий файл список найденных в указанной папке и...

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

Получить список папок в папке но не в подпапках
Здравствуйте. Как можно получить список имен папок и их количество в определенной папке но не в подпапках тоесть просто список папок...

Посчитать количество файлов в папке и подпапках
Приветствую всех! Появилась задача посчитать кол-во файлов в папке и подпапках. И все бы ничего, если бы не надо было это сделать по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

Новые блоги и статьи
Вопросы на собеседованиях по микросервисам
ArchitectMsa 27.03.2025
Работодатели ищут не просто разработчиков, знающих базовые концепции, а специалистов, разбирающихся в тонкостях масштабирования, отказоустойчивости и производительности. Сейчас на первый план выходят. . .
Взаимодействие Python с REST API
py-thonny 27.03.2025
REST API - это архитектурный стиль взаимодействия компонентов распределённого приложения в сети. Python располагает функциональным набором инструментов для работы с REST API и основная библиотека для. . .
sshd restrictions, ssh access limitations
jigi33 26.03.2025
sshd restrictions | ssh access limitations рестрикции доступа на сервер sshd статья: https:/ / www. golinuxcloud. com/ restrict-allow-ssh-certain-users-groups-rhel
Компиляция C++ с Clang API
NullReferenced 24.03.2025
Компиляторы обычно воспринимаются как черные ящики, которые превращают исходный код в исполняемые файлы. Мы запускаем компилятор командой в терминале, и вуаля — получаем бинарник. Но что если нужно. . .
Многопоточное программировани­е в C#: Класс Thread
UnmanagedCoder 24.03.2025
Когда запускается приложение на компьютере, операционная система создаёт для него процесс - виртуальное адресное пространство. В C# этот процесс изначально получает один поток выполнения — главный. . .
SwiftUI Data Flow: Передача данных между представлениями
mobDevWorks 23.03.2025
При первом знакомстве со SwiftUI кажется, что фреймворк предлагает избыточное количество механизмов для передачи данных: @State, @Binding, @StateObject, @ObservedObject, @EnvironmentObject и другие. . . .
Моки в Java: Сравниваем Mockito, EasyMock, JMockit
Javaican 23.03.2025
Как протестировать класс, который зависит от других сложных компонентов, таких как базы данных, веб-сервисы или другие классы, с которыми и так непросто работать в тестовом окружении? Для этого и. . .
Архитектурные паттерны микросервисов: ТОП-10 шаблонов
ArchitectMsa 22.03.2025
Популярность микросервисной архитектуры объясняется множеством важных преимуществ. К примеру, она позволяет командам разработчиков работать независимо друг от друга, используя различные технологии и. . .
Оптимизация рендеринга в Unity: Сортировка миллиона спрайтов
GameUnited 22.03.2025
Помните, когда наличие сотни спрайтов в игре приводило к существенному падению производительности? Время таких ограничений уходит в прошлое. Сегодня геймдев сталкивается с задачами совершенно иного. . .
Образование и практика
Igor3D 21.03.2025
Добрый день А вот каково качество/ эффективность ВУЗовского образования? Аналитическая геометрия изучается в первом семестре и считается довольно легким курсом, что вполне справедливо. Ну хорошо,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru