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

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

поиск папок [D7, WinXP]


Страницы:   1 2

QAZ ©   (2009-06-10 12:46:00) 

есть ли нормальный\быстрый способ поиска папок или проверки что в папке есть папка
кроме как искать все файлы и по атрибутам смотреть папка это или нет?
может интерфейсы оболочки или как нибуть


QAZ   (2009-06-10 18:37:00) [21]


> если все файлы на букву А, а папка - на Я ?

именно так

> Пришлось написать для FindFirst и обнаружить строчку в Sysutils.
> pas
>
> const
>  faSpecial = faHidden or faSysFile or faDirectory;
> ...
>  F.ExcludeAttr := not Attr and faSpecial;

тут я чесно не въехал
я не пользуюсь VCLными надстройками над надстройками над winapi
чистая FindFirstFile и FindNextFile не получаетатрибуты поиска, а возвращает
атрибуты найденых файлов


Игорь Шевченко   (2009-06-10 18:07:00) [22]


> Можно ускорится, например, при помощи NtQueryDirectoryFile.


согласно Неббету, NtQueryDirectoryFile - это то, во что превращается вызов FindFirst


clickmaker   (2009-06-10 17:59:00) [23]

> в том то и вопрос что они не могут искать только папки
> и нахождение 1 папки среди 8000 файлов например затянеца

если все файлы на букву А, а папка - на Я ?


Riply   (2009-06-10 17:47:00) [24]

> [5] QAZ   (10.06.09 14:57)
> и нахождение 1 папки среди 8000 файлов например затянеца

Можно ускорится, например, при помощи NtQueryDirectoryFile.


Игорь Шевченко   (2009-06-10 16:17:00) [25]

QAZ   (10.06.09 16:02) [13]

Уел :) Не на третьей.

Пришлось написать для FindFirst и обнаружить строчку в Sysutils.pas

const
 faSpecial = faHidden or faSysFile or faDirectory;
...
 F.ExcludeAttr := not Attr and faSpecial;

Приношу извинения.


QAZ   (2009-06-10 16:02:00) [26]


> странно, у меня работает.

тоесть при поиске папки с именем '*'
в папке с парой сотен файлов и одной папкой 'yes'
она находится на 3й итерации цикла ? :)


Dennis I. Komarov   (2009-06-10 16:00:00) [27]

Syntax

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

Description
FindFirst searches the directory specified by Path for the first file that matches the file name implied by Path and the attributes specified by the Attr parameter. The result is returned in the F parameter. Use the fields of this search record to extract the information needed. FindFirst returns 0 if a file was successfully located, otherwise, it returns an error code.

The Path constant parameter is the directory and file name mask, including wildcard characters. For example, '.\test\*.*' specifies all files in the test subdirectory.

The Attr parameter specifies the special files to include in addition to all normal files. Choose from these file attribute constants when specifying the Attr parameter:
  Constant  Description
faReadOnly
Read-only files

faHidden
Hidden files

faSysFile
System files

faVolumeID
Volume ID files

faDirectory
Directory files

faArchive
Archive files

faAnyFile
Any file


Attributes can be combined by adding (Delphi) or or-ing (C++) their constants or values. For example, to search for read-only and hidden files in addition to normal files, pass (faReadOnly + faHidden) in Delphi or (faReadOnly | faHidden) in C++ as the Attr parameter. To include only normal files, pass zero for the Attr parameter.


DVM   (2009-06-10 15:44:00) [28]


> QAZ


> и нахождение 1 папки среди 8000 файлов например затянеца

Ну среди 8000 не особо то и затянется, но вот среди миллиона да, будет не очень быстро. Но вообще то, если есть необходимость в столь быстром поиске среди большого количества файлов, то сведения о них надо заранее поместить в БД. Тогда поиск будет занимать доли секунды, практически независимо от количества записей о файлах. В фоновом режиме база должна регулярно пополняться/обновляться, если файлы и папки меняются.


Игорь Шевченко   (2009-06-10 15:44:00) [29]


> нихрена он ничего не определяет\не работает


странно, у меня работает.


QAZ   (2009-06-10 15:36:00) [30]


> справке у FindFirst написано, что параметр Attr: Integer
> определяет

нихрена он ничего не определяет\не работает

> Да ну?

ну да

реч идет о поиске папок вообще (*) а не с конкретным именем(folderxyz)


Ega23   (2009-06-10 15:30:00) [31]


> в том то и вопрос что они не могут искать только папки
> и нахождение 1 папки среди 8000 файлов например затянеца


Да ну?


Игорь Шевченко   (2009-06-10 15:17:00) [32]


> в том то и вопрос что они не могут искать только папки
> и нахождение 1 папки среди 8000 файлов например затянеца


Тот, кто перенес из Winapi в курсе, что папка и файл с точки зрения файловой системы одно и то же.
Тот, кто перенес из WinApi в курсе, что в справке у FindFirst написано, что параметр Attr: Integer определяет, какие файлы будут в результате поиска


Германн   (2009-06-10 15:03:00) [33]


> в том то и вопрос что они не могут искать только папки

С точки зрения ОС папка и файл почти одно и тоже. Так что тот кто перенес знает, что делает.


QAZ   (2009-06-10 14:57:00) [34]

Удалено модератором
Примечание: Обсуждение модерирования


Германн   (2009-06-10 14:52:00) [35]


> brother ©   (10.06.09 12:48) [1]
>
> что такое рекруссия знаешь?
>

Я тоже не знаю :(


Ega23   (2009-06-10 14:51:00) [36]

FindFirst, FindNext - чего быстрее-то?


Плохиш   (2009-06-10 14:28:00) [37]


> есть ли нормальный\быстрый способ поиска папок или проверки
> что в папке есть папка
> кроме как искать все файлы и по атрибутам смотреть папка
> это или нет?
>

Хм, что-то типа проверки девственности не заглядывая туда?


brother   (2009-06-10 12:48:00) [38]

что такое рекруссия знаешь?


Страницы:   1 2

Наверх

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