Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2010, 02:34   #1
_GT_
 
Регистрация: 08.05.2010
Сообщений: 9
По умолчанию Поиск файлов

Как реализовать такую функцию? в инете встречал примеры, но там все начинается с "читаем дерево каталогов создаем его копию в памяти...." это принципиально неприемлемо. мой виндовый раздел всего 20гб, чтение всех каталогов занимает порядка 3-4 минут. Это очень долго. Тем более что все дерево не нужно. Можно ли как то обойти эту длительную операцию?
_GT_ вне форума Ответить с цитированием
Старый 09.05.2010, 09:51   #2
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

вот пример поиска mp3 файлов
Код:
const int MAXX_PATH = 260;  // Максимальная длина пути к файлу
const char * MASK = "*.mp3";  //маска поиска
void findFiles(char path[])           //ищет файлы в каталоге path
{
	_finddata_t * fileinfo= new _finddata_t;  //Объявление указателя fileinfo на структуру _finddata_t
											  //Данная структура помогает задать критерии поиска
	char findFilePath[MAX_PATH];  //полный путь для поиска файлов по маскe;
	char  findDirPath[MAX_PATH];  //полный путь для поиска вложенных каталогов
 	strcpy(findFilePath, path);   //собираем полный путь из каталога поиска
	strcat(findFilePath, MASK);	  //и его маски
	long done = _findfirst(findFilePath,fileinfo);    // Функция _findfirst() принимает два параметра: 
													  //где и что искать и указатель на структуру _finddata_t
   // Если функция не сможет успешно отработать - то она вернет -1,
   // в противном случае, переменная done будет содержать уникальный 
   // номер полученной группы файлов, удовлетворяющих заданному условию 
   // поиска. То есть файлы, которые удовлетворяют критерию поиска 
   // представляют собою как бы группу, к которой в дальнейшем мы сможем 
   // обратиться, через функцию _findnext
	int MayWeWork = done;   
	while (MayWeWork!=-1)
	{    
		if(fileinfo->attrib & 32)        //является ли текущий найденный элемент файлом
		{
			cout << RussianMessage(path) << RussianMessage(fileinfo->name) << endl;//выводим в каталог его полный путь
		}
		MayWeWork = _findnext(done, fileinfo);    // Пытаемся найти следующий файл из группы    
	}
	strcpy(findDirPath, path);          //cобираем полный путь для поиска вложенных каталов
	strcat(findDirPath, "*.*");
	done = _findfirst(findDirPath, fileinfo);
	MayWeWork = done;
	while(MayWeWork != -1)
	{
		//если текущий элемент каталог и не равен "." и не равен ".."
		if(fileinfo->attrib & _A_SUBDIR && strcmp(fileinfo->name, ".") && strcmp(fileinfo->name, ".."))
		{
			char newPath[MAX_PATH];  //новый полный путь со вложенной папкой
			strcpy(newPath, path);   //текущий каталог
			strcat(newPath, fileinfo->name); //плюс вложенный каталог
			strcat(newPath, "\\");		//плюс слеш
			findFiles(newPath);      //запускаем рекурсивную функцию для поиска во вложенном каталоге
		}
		MayWeWork = _findnext(done, fileinfo);// Пытаемся найти следующий файл из группы   
	}
	delete fileinfo;  
}
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 09.05.2010, 13:46   #3
_GT_
 
Регистрация: 08.05.2010
Сообщений: 9
По умолчанию

Цитата:
Объявление указателя fileinfo на структуру _finddata_t
а где эта структура?
_GT_ вне форума Ответить с цитированием
Старый 09.05.2010, 15:57   #4
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

Цитата:
Сообщение от _GT_ Посмотреть сообщение
а где эта структура?
она находится в io.h
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 09.05.2010, 16:42   #5
_GT_
 
Регистрация: 08.05.2010
Сообщений: 9
По умолчанию

т.е для функционирования нужны io.h и string.h
ок, спс.
А где можно найти документацию io.h?
_GT_ вне форума Ответить с цитированием
Старый 09.05.2010, 16:46   #6
_GT_
 
Регистрация: 08.05.2010
Сообщений: 9
По умолчанию

сейчас посмотрел на эти структуры. хм... там все дублировано т.е обычная структура и 64. Эти 64 структуры они чем то отличаются от обычных или это просто для 64 битного приложения?
_GT_ вне форума Ответить с цитированием
Старый 09.05.2010, 20:10   #7
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Вот ещё тебе примерчик, реализовал поиск определенного файла в том каталоге, где находится .exe файл твоей программы

Код:
void CFunction::PCSearchFile()
{
    printf("[SEARCH FILE]\n Name: -> ");
    gets(STRF.STSearchFile);

    if (strlen(STRF.STSearchFile) > szCHAR)
    { MessageBoxA(NULL, "The file name exceeds limit of char!", "Error!", MB_OK); }

    TSearchRec SearchRecord;

    int fCounter = 0;

    if ( GetCurrentDirectoryA(sizeof(szPATH), szPATH) )
    {
        if (FindFirst("*", faAnyFile, SearchRecord) == 0)
	{
	    do
	    { 
	        if (fCounter > 2)
		{
		    if (SearchRecord.Name == STRF.STSearchFile)
		    { printf("\n[%s]\n\n", szPATH);
		        printf("\"Required file: %s\" ", SearchRecord.Name);
		    }
		}
                fCounter++;
	    } while (FindNext(SearchRecord) == 0);
	} FindClose(SearchRecord);
    } printf("\n"); 
}

Последний раз редактировалось coNsept; 09.05.2010 в 20:12.
coNsept вне форума Ответить с цитированием
Старый 09.05.2010, 21:37   #8
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

coNsept, этот код будет работать только в С++ Builder
_GT_, дока
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 09.05.2010, 21:53   #9
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Это почему ?
coNsept вне форума Ответить с цитированием
Старый 09.05.2010, 22:28   #10
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

coNsept, Такой структуры и таких функций нету в других компиляторах.
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++. Поиск файлов profi Помощь студентам 2 16.06.2009 16:04
Поиск файлов Ralf_ru Общие вопросы Delphi 1 30.03.2009 15:42
Поиск файлов LeoN Общие вопросы Delphi 5 25.11.2007 22:54
Поиск файлов necky Общие вопросы Delphi 10 31.08.2007 00:27