IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Поиск в папке и ее подпапках, C++
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 7
Пол: Мужской
Реальное имя: Alex

Репутация: -  0  +


Здравствуйте всем доброго времени суток. Я вот только начал изучать С++ и у меня есть вопросик. Как реализовать поиск в папке и ее подпапках?
{
WIN32_FIND_DATA FindFileData;
HANDLE hf;
hf=FindFirstFile("c:\\test\\*.txt", &FindFileData);
if (hf!=INVALID_HANDLE_VALUE)
{
do
{
cout << FindFileData.cFileName << endl;
}

Я на правильном пути? smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
Я на правильном пути?
Во первых это не С++, а чистый С, во вторых, для решения твоей задачи придется выносить поиск в функцию, и вызывать ее рекурсивно...

В общем,
#include <windows.h>
#include <stdio.h>

BOOL SearchFiles(LPCTSTR lpszFileName, BOOL bInnerFolders = TRUE)
{
LPTSTR part;
char tmp[MAX_PATH]; // временный массив
char name[MAX_PATH];

HANDLE hSearch = NULL;
WIN32_FIND_DATA wfd;
memset(&wfd, 0, sizeof(WIN32_FIND_DATA));

// сначала поиск внутри вложенных папок ...
if(bInnerFolders)
{
if(GetFullPathName(lpszFileName, MAX_PATH, tmp, &part) == 0) return FALSE;
strcpy(name, part);
strcpy(part, "*.*");

// если папки существуют, то делаем поиск
wfd.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY;
if (!((hSearch = FindFirstFile(tmp, &wfd)) == INVALID_HANDLE_VALUE))
do
{
// в каждой папке есть две папки с именами "." и ".."
// и эти папки мы не трогаем

// пропускаем папки "." и ".."
if (!strncmp(wfd.cFileName, ".", 1) || !strncmp(wfd.cFileName, "..", 2))
continue;

if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) // если мы нашли папку
{
char next[MAX_PATH];
if(GetFullPathName(lpszFileName, MAX_PATH, next, &part) == 0) return FALSE;
strcpy(part, wfd.cFileName);
strcat(next, "\\");
strcat(next, name);

SearchFiles(next, TRUE);
}
}
while (FindNextFile(hSearch, &wfd)); // ищем следующий файл

FindClose (hSearch); // заканчиваем поиск
}

if ((hSearch = FindFirstFile(lpszFileName, &wfd)) == INVALID_HANDLE_VALUE)
return TRUE; // в противном случае выходим
do
if (!(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) // если мы нашли файл
{
char file[MAX_PATH];
if(GetFullPathName(lpszFileName, MAX_PATH, file, &part) == 0) return FALSE;
strcpy(part, wfd.cFileName);

printf("%s\n", file);
}
while (FindNextFile(hSearch, &wfd)); // ищем следующий файл
FindClose (hSearch); // заканчиваем поиск

return TRUE;
}

int main()
{
SearchFiles("G:\\Received\\*.txt", TRUE);
return 0;
}

(С) Лепрекон, с моей незначительной правкой.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 7
Пол: Мужской
Реальное имя: Alex

Репутация: -  0  +


volvo cпасибо как всегда помог good.gif . Теперь вопросик как при помощи этой функции копировать/удалять найденные файлы? unsure.gif

Сообщение отредактировано: Apache -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
как при помощи этой функции копировать/удалять найденные файлы?
Пропиши нужные тебе действия вместо printf... ( для удаления: DeleteFile, для копирования/перемещения: CopyFile / MoveFile )
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 25.04.2024 12:04
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name