![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
поиск папок [D7, WinXP]
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]что такое рекруссия знаешь?