Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поиск файлов по маске [D7, XP]


Sdubaruhnul ©   (2007-07-29 18:25:00) 

Здравствуйте, Мастера.

Использую для поиска ф-ии API FindFirstFileW и компанию. Как бы лучше организовать поиск файлов по маске, допустим такой: "*.txt; *.doc". Вижу два варианта:

1. Задаю длинную поисковую строку типа "c:\temp\*.txt; c:\temp\*.doc".
2. Ищу всё строкой типа "c:\temp\*.*" и далее проверяю найденное на предмет соответствия маске.


DVM   (2007-08-03 13:45:00) [1]


> С точки зрения поиска файла передача маски будет нааамногооо
> быстрее

Вы проверяли?


Двигатель внешнего сгорания   (2007-08-03 13:34:00) [2]


> Плохиш ©   (31.07.07 12:44) [12]
> > Как будет быстрее с точки зрения поиска файлов?С точки
> зрения поиска файла передача маски будет нааамногооо быстрее,
>  чем, то, что может быть нагорожено проверками...


Абсолютно одинаково.


Плохиш   (2007-07-31 12:44:00) [3]


> Как будет быстрее с точки зрения поиска файлов?

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


Плохиш   (2007-07-31 12:39:00) [4]


> (ведь может получится из десять путей чёрти что)

Если топтать кнопки не думая и не понимая, то да, может получиться.


Двигатель внешнего сгорания   (2007-07-31 12:33:00) [5]


> Sdubaruhnul   (30.07.07 16:07) [7]
> >а FindFirstFile разве поймет вариант 1?

Поймёт.


Откуда такая информация?


> 1. Задаю длинную поисковую строку типа "c:\temp\*.txt; c:
> \temp\*.doc".2. Ищу всё строкой типа "c:\temp\*.*" и далее
> проверяю найденное на предмет соответствия маске.


Второй вариант однозначно.
Стандартные функции так и работают: Перебор всех файлов и проверка соответствия маске.


iXT   (2007-07-30 17:01:00) [6]

2 + if is Dir then FindInDir


DVM   (2007-07-30 16:12:00) [7]


> Нет, чего-то я склоняюсь ко второму варианту.

ИМХО 2) удобнее и понятнее. До опр. пределов, конечно.


Sdubaruhnul   (2007-07-30 16:07:00) [8]

> а FindFirstFile разве поймет вариант 1?

Поймёт. Но мне эту строку сначала надо составить, а потом FindFirstFile будет её разбирать. И так нужно составлять для каждой подпапки, если искать всё внутри каталога. Нет, чего-то я склоняюсь ко второму варианту.


clickmaker   (2007-07-30 15:15:00) [9]


> 1. Задаю длинную поисковую строку типа "c:\temp\*.txt; c:\temp\*.doc".
> 2. Ищу всё строкой типа "c:\temp\*.*" и далее проверяю найденное
> на предмет соответствия маске.

а FindFirstFile разве поймет вариант 1?


Sdubaruhnul   (2007-07-30 14:53:00) [10]

FindFirst, FindNext...


function FindFirst(const Path: string; Attr: Integer;
 var  F: TSearchRec): Integer;

 F.FindHandle := FindFirstFile( PChar(Path), F.FindData);


Сергей М.   (2007-07-30 11:28:00) [11]


> Готовые Дельфийские функции не годятся - они все не-Unicode'ные


Это какие же ?


Sdubaruhnul   (2007-07-30 11:22:00) [12]

Так что, никто не может посоветовать? Как будет быстрее с точки зрения поиска файлов? Не опасно ли передавать длинные строки (ведь может получится из десять путей чёрти что)?

Готовые Дельфийские функции не годятся - они все не-Unicode'ные.


Sdubaruhnul   (2007-07-29 20:49:00) [13]

> Однако файловые функции есть для этого, в.ч. и для масок

Какие? Важен Unicode.


MsGuns   (2007-07-29 20:18:00) [14]

Однако файловые функции есть для этого, в.ч. и для масок


Наверх

Титульная страница Поиск, карта сайта Написать письмо