Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск файла по имени, Поиск файла по имени 
:(
    Опции темы
evgovs1991
Дата 7.11.2015, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 9.10.2014

Репутация: нет
Всего: нет



Подскажите как можно найти файл на компьютере зная только имя...и в результате вывести его полный путь в listbox ?
PM MAIL   Вверх
Cheloveck
Дата 7.11.2015, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: 1
Всего: 32





--------------------
user posted image
PM Jabber   Вверх
xvr
Дата 9.11.2015, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(evgovs1991 @  7.11.2015,  14:06 Найти цитируемый пост)
Подскажите как можно найти файл на компьютере зная только имя

Можно, но искать придется очень и очень долго  smile 
Попробуйте Windows Search сервис - должно быть гораздо быстрее, но успех не гарантирован  smile 
PM MAIL   Вверх
chaeman
Дата 30.11.2015, 20:23 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 30.11.2015

Репутация: нет
Всего: нет



посмотри алгоритмы поиска
PM MAIL   Вверх
Doga
Дата 22.1.2016, 18:21 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 20.12.2007
Где: Россия, Обнинск

Репутация: нет
Всего: нет



Привет.

Вот универсальная функция для поиска файлов по имени, расширению и др. :

Код

#include <SysUtils.hpp>
#include <Masks.hpp>

//Флаг для принудительной остановки процесса поиска
bool SearchIsStopped = false;

//FilesSearch возвращает список найденных файлов в виде объекта TStringList, 
//или NULL, если необходимые файлы не удалось обнаружить

//Аргументы:
//AnsiString ASearchFolder - целевой каталог, в котором должен быть произведён поиск файлов, напр.: "c:\\windows" 
//AnsiString ASearchMask - маска для поиска файлов, напр.: "win*.*", "*.exe", ...
//bool ASearchInSubFolders - флаг, разрешающий поиск в подкаталогах
TStringList * __fastcall FilesSearch(AnsiString ASearchFolder, AnsiString ASearchMask, bool ASearchInSubFolders)
{
  TStringList *Result = NULL;

  if (Sysutils::DirectoryExists(ASearchFolder))
  {                   
    TSearchRec  SearchRec;

    AnsiString  MaskFolderString;
    
    //Список для хранения найденных каталогов
    TStringList *FoldersList = new TStringList();
    FoldersList->Clear();

    FoldersList->Append(ASearchFolder);

    //Нормализация пути (можно использовать NormalDir(...) из RxLib или JEDI VCL)
    if (FoldersList->Strings[0][FoldersList->Strings[0].Length()] != '\\')
    {
      FoldersList->Strings[0] = FoldersList->Strings[0] + "\\";
    }

    for (int m = 0; m < FoldersList->Count; m++)
    {
      //Маска поиска - все файлы и подкаталоги
      MaskFolderString = FoldersList->Strings[m] + "*.*";
      
      //Поиск всех подкаталогов в выбраном каталоге
      for (int k = 0; ; )
      {
        if (!k)
        {
          if (FindFirst(MaskFolderString, faAnyFile, SearchRec))
          {
            FindClose(SearchRec);
            break;
          }
          else
          {
            k++;
          }
        }
        else
        {
          if (FindNext(SearchRec))
          {
            FindClose(SearchRec);
            break;
          }
        }

        //Если это подкаталог - добавляем его к списку FoldersList, если это разрешено
        if(SearchRec.Attr&faDirectory)
        {
          if(ASearchInSubFolders)
          {
            if((SearchRec.Name != ".") && (SearchRec.Name != ".."))
            {
              FoldersList->Append(AnsiString(FoldersList->Strings[m] + SearchRec.Name));

              //Нормализация пути (можно использовать NormalDir(...) из RxLib или JEDI VCL)
              if (FoldersList->Strings[FoldersList->Count - 1][FoldersList->Strings[FoldersList->Count - 1].Length()] != '\\')
              {
                FoldersList->Strings[FoldersList->Count - 1] = FoldersList->Strings[FoldersList->Count - 1] + "\\";
              }
            }
          }
        }
        //Если это нужный файл - добавляем его к выходному списку Result
        else if( !(SearchRec.Attr & (faVolumeID|faDirectory)) )
        {
          //Проверка имени файла по маске поиска
          if (MatchesMask(SearchRec.Name, ASearchMask))
          {
            if (!Result)
            {
              Result = new TStringList();
              Result->Clear();
            }
          
            Result->Append(FoldersList->Strings[m] + SearchRec.Name);
          }
        }
        
        //Обработка очереди сообщений
        Application->ProcessMessages();

        //Выход из режима поиска, если нужно
        if (SearchIsStopped)
        {
          break;
        }
      }
    }

    delete FoldersList;
  }

  return Result;  
}
 

Использование:
Код

TStringList * FilesList;

//Найдёт все EXE-файлы в каталоге c:\windows и во всех его подкаталогах
FilesList = FilesSearch("c:\\windows" , "*.exe", true);

if (FilesList)
{
  //Работа с найденными файлами...

  delete FilesList;
}

//Найдёт все начинающиеся на "win" файлы в каталоге c:\windows и во всех его подкаталогах
FilesList = FilesSearch("c:\\windows" , "win*.*", true);

if (FilesList)
{
  //Работа с найденными файлами...

  delete FilesList;
}


Функция FilesSearch для поиска файлов рекурсию не использует.

Это сообщение отредактировал(а) Doga - 1.2.2016, 12:59
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1018 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.