Заблокирован

Как выполнить поиск файлов в папке и подпапках, и подподпапках, и т.д.?

09.10.2011, 00:48. Показов 4645. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Как выполнить поиск файлов в папке и подпапках, и подподпапках, и т.д.?

В поисковики не посылать: был, то что нашел, не заработало.

Буду очень благодарен за подробный код с комментами

Зараннее спасибо!


Добавлено через 18 минут
Ответьте кто-нибудь, плиз
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.10.2011, 00:48
Ответы с готовыми решениями:

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

Поиск файлов форматов pdf, jpg, png в папке и подпапках
Доброго дня господа! Подскажите мне пожалуйста, как мне можно найти файлы форматов в папке и под папках не зная точного имени файла. ...

Поиск в папке и подпапках файлов, созданных или измененных за определенную дату
Есть папка(D:\wscom). В ней лежат файлы, папки, подпапки. на форме текстовое поле(для ввода даты за которую необходимо осуществить...

18
545 / 344 / 12
Регистрация: 05.11.2010
Сообщений: 1,076
Записей в блоге: 1
09.10.2011, 03:53
Все спят.
Рекурсивный поиск надо делать )

Добавлено через 27 минут
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 search(System::IO::DirectoryInfo ^dirInfo, System::String ^what);
 
void search(System::IO::DirectoryInfo ^dirInfo, System::String ^what) {
    //  Получаем массив информации о файлах, удовлетворяющих шаблону
    cli::array<System::IO::FileInfo ^> ^filesInfo = dirInfo->GetFiles(what);
 
    //  Печатаем все найденные имена
    for each(System::IO::FileInfo ^f in filesInfo) {
        Console::WriteLine(f->FullName);
    }
 
    //  Получаем список поддиректорий, чьи имена содержат искомый шаблон
    cli::array<System::IO::DirectoryInfo ^> ^dirsMatchedInfo = dirInfo->GetDirectories(what);
    //  Выводим
    for each(System::IO::DirectoryInfo ^d in dirsMatchedInfo) {
        Console::WriteLine(d->FullName);
    }
 
    //  Получаем список всех поддиректорий
    cli::array<System::IO::DirectoryInfo ^> ^dirsInfo = dirInfo->GetDirectories();
    //  Во всех поддиректориях
    for each(System::IO::DirectoryInfo ^d in dirsInfo) {
        //  Собственно рекурсия
        search(d, what);
    }
}
 
int main(array<System::String ^> ^args)
{
    System::String ^searchPath = L"C:\\";
    System::String ^searchWhat = L"shared*";
    System::IO::DirectoryInfo ^dirInfo = System::IO::Directory::CreateDirectory(searchPath);
 
    search(dirInfo, searchWhat);
    return 0;
}
К примеру так. Можно вообще элементарно:
C++
1
2
3
4
    cli::array<System::IO::FileInfo ^> ^filesInfo = dirInfo->GetFiles(what, System::IO::SearchOption::AllDirectories);
    for each(System::IO::FileInfo ^f in filesInfo) {
        Console::WriteLine(f->FullName);
    }
Но этот вариант будет выводить результаты лишь после того, как слазит во все поддиректории. В случае корня диска искать будет долго, я лично на своем ноуте результата сейчас так и не дождался за пару минут.
А первый вариант пообъемнее, но будет выводить сразу.
2
Заблокирован
17.10.2011, 23:46  [ТС]
Цитата Сообщение от Герц Посмотреть сообщение
Все спят.
Рекурсивный поиск надо делать )


Но этот вариант будет выводить результаты лишь после того, как слазит во все поддиректории. В случае корня диска искать будет долго, я лично на своем ноуте результата сейчас так и не дождался за пару минут.
А первый вариант пообъемнее, но будет выводить сразу.
Спасибо большое, вроде получилось
0
Заблокирован
30.10.2011, 18:57  [ТС]
Когда пробую выполнить поиск файлов указанным выше методом, то программа запускается, и функция, вроде, вызывается, но поиска файлов не происходит В чем я на косячил?

объявляю функцию

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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#pragma region Windows Form Designer generated code
        /// <summary>
        /// Обязательный метод для поддержки конструктора - не изменяйте
        /// содержимое данного метода при помощи редактора кода.
        /// </summary>
        void InitializeComponent(void)
        {
            System::ComponentModel::ComponentResourceManager^  resources = (gcnew System::ComponentModel::ComponentResourceManager(Playlist::typeid));
            this->LV1 = (gcnew System::Windows::Forms::ListView());
            this->CH1 = (gcnew System::Windows::Forms::ColumnHeader());
            this->CH2 = (gcnew System::Windows::Forms::ColumnHeader());
            this->CH3 = (gcnew System::Windows::Forms::ColumnHeader());
            this->CH4 = (gcnew System::Windows::Forms::ColumnHeader());
            this->CH5 = (gcnew System::Windows::Forms::ColumnHeader());
            this->CH6 = (gcnew System::Windows::Forms::ColumnHeader());
            this->pAddF = (gcnew System::Windows::Forms::PictureBox());
            this->pAddFSel = (gcnew System::Windows::Forms::PictureBox());
            this->FBD1 = (gcnew System::Windows::Forms::FolderBrowserDialog());
            this->pFAdd = (gcnew System::Windows::Forms::PictureBox());
            this->pFAddSel = (gcnew System::Windows::Forms::PictureBox());
            (cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->pAddF))->BeginInit();
            (cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->pAddFSel))->BeginInit();
            (cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->pFAdd))->BeginInit();
            (cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->pFAddSel))->BeginInit();
            this->SuspendLayout();
            // 
            // LV1
            // 
            this->LV1->BackColor = System::Drawing::Color::FromArgb(static_cast<System::Int32>(static_cast<System::Byte>(64)), static_cast<System::Int32>(static_cast<System::Byte>(64)), 
                static_cast<System::Int32>(static_cast<System::Byte>(64)));
            this->LV1->BorderStyle = System::Windows::Forms::BorderStyle::None;
            this->LV1->Columns->AddRange(gcnew cli::array< System::Windows::Forms::ColumnHeader^  >(6) {this->CH1, this->CH2, this->CH3, 
                this->CH4, this->CH5, this->CH6});
            this->LV1->ForeColor = System::Drawing::Color::WhiteSmoke;
            this->LV1->Location = System::Drawing::Point(0, 0);
            this->LV1->Name = L"LV1";
            this->LV1->Size = System::Drawing::Size(382, 501);
            this->LV1->TabIndex = 0;
            this->LV1->UseCompatibleStateImageBehavior = false;
            this->LV1->View = System::Windows::Forms::View::Details;
            this->LV1->DrawItem += gcnew System::Windows::Forms::DrawListViewItemEventHandler(this, &Playlist::LV1_DrawItem);
            this->LV1->DrawSubItem += gcnew System::Windows::Forms::DrawListViewSubItemEventHandler(this, &Playlist::LV1_DrawSubItem);
            this->LV1->ItemCheck += gcnew System::Windows::Forms::ItemCheckEventHandler(this, &Playlist::LV1_ItemCheck);
            // 
            // CH1
            // 
            this->CH1->Text = L"";
            this->CH1->Width = 26;
            // 
            // CH2
            // 
            this->CH2->Text = L"Название трека";
            this->CH2->Width = 146;
            // 
            // CH3
            // 
            this->CH3->Text = L"Исполнитель";
            this->CH3->Width = 83;
            // 
            // CH4
            // 
            this->CH4->Text = L"Время";
            this->CH4->Width = 53;
            // 
            // CH5
            // 
            this->CH5->Text = L"Альбом";
            this->CH5->Width = 74;
            // 
            // CH6
            // 
            this->CH6->Text = L"Адрес";
            this->CH6->Width = 600;
            // 
            // pAddF
            // 
            this->pAddF->BackColor = System::Drawing::Color::Transparent;
            this->pAddF->Image = (cli::safe_cast<System::Drawing::Image^  >(resources->GetObject(L"pAddF.Image")));
            this->pAddF->InitialImage = (cli::safe_cast<System::Drawing::Image^  >(resources->GetObject(L"pAddF.InitialImage")));
            this->pAddF->Location = System::Drawing::Point(10, 504);
            this->pAddF->Name = L"pAddF";
            this->pAddF->Size = System::Drawing::Size(48, 48);
            this->pAddF->TabIndex = 1;
            this->pAddF->TabStop = false;
            this->pAddF->MouseEnter += gcnew System::EventHandler(this, &Playlist::pAddF_MouseEnter);
            // 
            // pAddFSel
            // 
            this->pAddFSel->BackColor = System::Drawing::Color::Transparent;
            this->pAddFSel->Image = (cli::safe_cast<System::Drawing::Image^  >(resources->GetObject(L"pAddFSel.Image")));
            this->pAddFSel->InitialImage = (cli::safe_cast<System::Drawing::Image^  >(resources->GetObject(L"pAddFSel.InitialImage")));
            this->pAddFSel->Location = System::Drawing::Point(10, 504);
            this->pAddFSel->Name = L"pAddFSel";
            this->pAddFSel->Size = System::Drawing::Size(48, 48);
            this->pAddFSel->TabIndex = 2;
            this->pAddFSel->TabStop = false;
            this->pAddFSel->Visible = false;
            this->pAddFSel->Click += gcnew System::EventHandler(this, &Playlist::pAddFSel_Click);
            this->pAddFSel->MouseLeave += gcnew System::EventHandler(this, &Playlist::pAddFSel_MouseLeave);
            // 
            // FBD1
            // 
            this->FBD1->Description = L"Укажите папку с музыкой:";
            this->FBD1->ShowNewFolderButton = false;
            // 
            // pFAdd
            // 
            this->pFAdd->BackColor = System::Drawing::Color::Transparent;
            this->pFAdd->Image = (cli::safe_cast<System::Drawing::Image^  >(resources->GetObject(L"pFAdd.Image")));
            this->pFAdd->InitialImage = (cli::safe_cast<System::Drawing::Image^  >(resources->GetObject(L"pFAdd.InitialImage")));
            this->pFAdd->Location = System::Drawing::Point(64, 504);
            this->pFAdd->Name = L"pFAdd";
            this->pFAdd->Size = System::Drawing::Size(48, 48);
            this->pFAdd->TabIndex = 3;
            this->pFAdd->TabStop = false;
            this->pFAdd->MouseEnter += gcnew System::EventHandler(this, &Playlist::pFAdd_MouseEnter);
            //
            // search
            //
            void search(System::IO::DirectoryInfo ^dirInfo, System::String ^what);
            // 
            // pFAddSel
            // 
            this->pFAddSel->BackColor = System::Drawing::Color::Transparent;
            this->pFAddSel->Image = (cli::safe_cast<System::Drawing::Image^  >(resources->GetObject(L"pFAddSel.Image")));
            this->pFAddSel->InitialImage = (cli::safe_cast<System::Drawing::Image^  >(resources->GetObject(L"pFAddSel.InitialImage")));
            this->pFAddSel->Location = System::Drawing::Point(64, 504);
            this->pFAddSel->Name = L"pFAddSel";
            this->pFAddSel->Size = System::Drawing::Size(48, 48);
            this->pFAddSel->TabIndex = 4;
            this->pFAddSel->TabStop = false;
            this->pFAddSel->Visible = false;
            this->pFAddSel->Click += gcnew System::EventHandler(this, &Playlist::pFAddSel_Click);
            this->pFAddSel->MouseLeave += gcnew System::EventHandler(this, &Playlist::pFAddSel_MouseLeave);
            // 
            // Playlist
            // 
            this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
            this->BackColor = System::Drawing::Color::Black;
            this->ClientSize = System::Drawing::Size(384, 562);
            this->Controls->Add(this->pFAddSel);
            this->Controls->Add(this->pFAdd);
            this->Controls->Add(this->pAddFSel);
            this->Controls->Add(this->pAddF);
            this->Controls->Add(this->LV1);
            this->Name = L"Playlist";
            this->Text = L"Плейлист";
            this->Load += gcnew System::EventHandler(this, &Playlist::Playlist_Load);
            this->ControlAdded += gcnew System::Windows::Forms::ControlEventHandler(this, &Playlist::Playlist_ControlAdded);
            this->Resize += gcnew System::EventHandler(this, &Playlist::Playlist_Resize);
            (cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->pAddF))->EndInit();
            (cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->pAddFSel))->EndInit();
            (cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->pFAdd))->EndInit();
            (cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->pFAddSel))->EndInit();
            this->ResumeLayout(false);
 
        }
вырезку из кода привел, чтобы было видно, где объявляю.

вызываю

C++
1
2
3
4
5
6
7
8
9
10
private: System::Void pFAddSel_Click(System::Object^  sender, System::EventArgs^  e) {
              System::Windows::Forms::DialogResult result = FBD1->ShowDialog();
              if ( result == System::Windows::Forms::DialogResult::OK ) {
                  System::String ^searchPath = FBD1 -> SelectedPath;
                  System::String ^searchWhat = L"\*";
                  System::IO::DirectoryInfo ^dirInfo = System::IO::Directory::CreateDirectory(searchPath);
 
                  search(dirInfo, searchWhat);
              }
         }
сама функция

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
         // search of files
 
void search(System::IO::DirectoryInfo ^dirInfo, System::String ^what) {
        //      Получаем массив информации о файлах, удовлетворяющих шаблону
        cli::array<System::IO::FileInfo ^> ^filesInfo = dirInfo->GetFiles(what);
 
        //      Печатаем все найденные имена
        for each(System::IO::FileInfo ^f in filesInfo) {
                Console::WriteLine(f->FullName);
        }
 
        //      Получаем список поддиректорий, чьи имена содержат искомый шаблон
        cli::array<System::IO::DirectoryInfo ^> ^dirsMatchedInfo = dirInfo->GetDirectories(what);
        //      Выводим
        for each(System::IO::DirectoryInfo ^d in dirsMatchedInfo) {
            [B]Playlist::LV1->Items->Add(d->FullName);;[/B] //заношу результат в listview
        }
 
        //      Получаем список всех поддиректорий
        cli::array<System::IO::DirectoryInfo ^> ^dirsInfo = dirInfo->GetDirectories();
        //      Во всех поддиректориях
        for each(System::IO::DirectoryInfo ^d in dirsInfo) {
                //      Собственно рекурсия
                search(d, what);
}
}

Добавлено через 3 часа 16 минут
Ответьте, пожалуйста, кто-нибудь
0
545 / 344 / 12
Регистрация: 05.11.2010
Сообщений: 1,076
Записей в блоге: 1
30.10.2011, 20:02
Небось строку с запросом неверно записываешь, там звездочка нужна на конце.
1
Заблокирован
30.10.2011, 21:01  [ТС]
Цитата Сообщение от Герц Посмотреть сообщение
Небось строку с запросом неверно записываешь, там звездочка нужна на конце.
Так есть же звездочка?! *.* тоже не работает
0
545 / 344 / 12
Регистрация: 05.11.2010
Сообщений: 1,076
Записей в блоге: 1
30.10.2011, 22:04
Дай мне *.cpp-шник от консольного C++/CLI приложения, чтобы я сам не собирал эти куски воедино, я посмотрю и попробую найти ошибку.
1
Заблокирован
31.10.2011, 23:36  [ТС]
Цитата Сообщение от Герц Посмотреть сообщение
Дай мне *.cpp-шник от консольного C++/CLI приложения, чтобы я сам не собирал эти куски воедино, я посмотрю и попробую найти ошибку.
В консоле у меня получается это сделать, но мне нужно с формой когда разобраться

Можешь выложить рабочий пример, чтоб была форма с кнопкой поиск и listview куда заносятся результаты поиска?
Заранее спасибо!
0
545 / 344 / 12
Регистрация: 05.11.2010
Сообщений: 1,076
Записей в блоге: 1
31.10.2011, 23:47
Мне этим заниматься времени сейчас нет, ты бы хоть макет формы накидал, упростил работу мне.
1
Заблокирован
02.11.2011, 19:48  [ТС]
Цитата Сообщение от Герц Посмотреть сообщение
Мне этим заниматься времени сейчас нет, ты бы хоть макет формы накидал, упростил работу мне.
У меня 2010 У тебя запустится?
0
Заблокирован
02.11.2011, 20:00  [ТС]
Вот, готово!
Вложения
Тип файла: zip FormForSearch.zip (760.4 Кб, 31 просмотров)
0
545 / 344 / 12
Регистрация: 05.11.2010
Сообщений: 1,076
Записей в блоге: 1
03.11.2011, 23:44
Cейчас наваяем.
0
545 / 344 / 12
Регистрация: 05.11.2010
Сообщений: 1,076
Записей в блоге: 1
04.11.2011, 00:27
Забирай
Миниатюры
Как выполнить поиск файлов в папке и подпапках, и подподпапках, и т.д.?  
Вложения
Тип файла: rar Search.rar (8.2 Кб, 64 просмотров)
1
545 / 344 / 12
Регистрация: 05.11.2010
Сообщений: 1,076
Записей в блоге: 1
04.11.2011, 14:06
А вот вариант с деревом:
Вложения
Тип файла: rar Search.rar (8.3 Кб, 49 просмотров)
1
Заблокирован
04.11.2011, 18:35  [ТС]
Большое спасибо, теперь все понятно и наглядно
0
545 / 344 / 12
Регистрация: 05.11.2010
Сообщений: 1,076
Записей в блоге: 1
04.11.2011, 22:14
Чтобы все это заполнялось побыстрее - нужно поиск вынести в отдельный поток, тогда список/дерево будут заполняться по мере нахождения новых айтемов.
В случае с деревом вообще стоит заполнять лишь текущий уровень вложенности, если пользователь нажал на одну из папок и захотел увидеть её содержимое - заполнять её, и так далее. Так можно и корень диска без проблем вывести в дереве, а с текущим вариантом придется ждать долго, пока алгоритм не залезет во все папки на всем диске :-)
1
0 / 0 / 0
Регистрация: 04.12.2011
Сообщений: 4
27.07.2013, 01:47
Цитата Сообщение от Герц Посмотреть сообщение
А вот вариант с деревом:
Мне тоже надо, но не могу открыть вложение. Пишет просмотр только со страниц сайта и возвращает обратно.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
29.07.2013, 22:12
Цитата Сообщение от GhostMan Посмотреть сообщение
Как выполнить поиск файлов в папке и подпапках, и подподпапках, и т.д.?
Рецепты приведены выше.
Добавлю, что поиск файлов должен также учитывать наличие на дисках
таких вещей, как reparse points. Например, папка "Goto_D" на диске "C" может
быть точкой монтирования диска "D". А папка "Goto_C" на диске "D" может
указывать обратно, на диск "C". При попытке выполнить рекурсивный обход
папок в такой файловой структуре произойдет зацикливание.
0
1 / 1 / 1
Регистрация: 25.02.2013
Сообщений: 38
12.08.2013, 00:41
А яем вас не устраивает православный
C++
1
%массив String^% = IO::Directory::GetFiles(%путь%, "*.*", IO::SearchOption::AllDirectories);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.08.2013, 00:41
Помогаю со студенческими работами здесь

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

Список файлов в папке и её подпапках
Привет всем скажите пожалуйста как получить список файлов в папке и её подпапках и подпапках папок этих подпапок :D вот такая вот муть)) ...

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

Создание списка файлов в папке и подпапках
Здравствуйте. Есть папка с подпапками, названия могут быть разные. Нужно получить список всех файлов и путь к ним. Чтобы в...

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


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

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

Новые блоги и статьи
Видеокарта простаивает ночами? Вот 4 проекта, которые загрузят её наукой
Programma_Boinc 10.04.2026
Видеокарта простаивает ночами? Вот 4 проекта, которые загрузят её наукой Если на Windows стоит дискретная NVIDIA или AMD — можно отдать её вычислительную мощность реальным исследованиям. . . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru