![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
поиск папок [D7, WinXP]
QAZ © (2009-06-10 12:46:00)есть ли нормальный\быстрый способ поиска папок или проверки что в папке есть папка
кроме как искать все файлы и по атрибутам смотреть папка это или нет?
может интерфейсы оболочки или как нибуть
QAZ (2009-06-11 11:58:00) [1]Удалено модератором
blurcode (2009-06-11 11:53:00) [2]Удалено модератором
QAZ (2009-06-11 11:51:00) [3]Удалено модератором
blurcode (2009-06-11 11:36:00) [4]
> QAZ (11.06.09 11:28) [33]
> > RTFM интересно какой :)
По ФС
clickmaker (2009-06-11 11:32:00) [5]> имя папки неизвесно
ну значит вероятность того, что в ней есть папка - 50%: либо есть, либо нет o)
QAZ (2009-06-11 11:28:00) [6]
> RTFM
интересно какой :)
> попробовать удалить
удалить что? имя папки неизвесно :D
clickmaker (2009-06-11 11:18:00) [7]> есть ли кашерный способ узнать что в папке есть папка ?
попробовать удалить
blurcode (2009-06-11 10:38:00) [8]
> QAZ (11.06.09 09:40) [30]
RTFM. Тебе уже сотню раз сказали.
> поэтому и возник вопрос,веть хоть папка и есть "файл"(это
> функции работы с файлами её делают файлом,по жизни это может
> просто запись в таблице файлов)то один фиг к ней привязаны
> файлы которыми она владеетзначит она должна както по особому
> храница на уровне ФС и соответсвено находится
Вон у Riply © поспрашивай она на этом собаку съела.
QAZ (2009-06-11 09:40:00) [9]на самом деле есть полукашерный способ определения
наличия папки за 3 шага цикла
я его пару лет назад нашел,а существует он с начала времен
есть тока один недостаток - не определяет папки с "неправильным" именем
поэтому и возник вопрос,веть хоть папка и есть "файл"(это функции работы с файлами её делают файлом,по жизни это может просто запись в таблице файлов)
то один фиг к ней привязаны файлы которыми она владеет
значит она должна както по особому храница на уровне ФС и соответсвено находится
Anatoly Podgoretsky (2009-06-11 07:41:00) [10]
> есть ли кашерный способ узнать что в папке есть папка ?
Нет папок, есть файлы с особыми признаками.
Германн (2009-06-11 01:52:00) [11]
> QAZ (10.06.09 20:24) [24]
>
> уточню\упрощу вопрос
> есть ли кашерный способ узнать что в папке есть папка ?
>
Ещё раз уточню суть вещей.
Для файловых систем используемых ОС Windows/MSDOS папка есть файл с атрибутом faDirectory. И никак, кроме банального перебора всех файлов, их (папок) не найти.
Германн (2009-06-11 01:29:00) [12]
> Riply © (10.06.09 20:41) [25]
>
> > [22] Игорь Шевченко © (10.06.09 20:04)
> > Я к другому - насколько мне известно, в системе не существует
> метода,
> > который просматривает только каталоги, игнорируя при этом
> остальные файлы.
>
> Я бы выразилась более осторожно: пока, мы не сумели найти
> такой метод :)
>
> Игорь Шевченко © (10.06.09 20:50) [26]
>
> Riply © (10.06.09 20:41) [25]
>
> А собственно, перечень для поиска известен - API
С вероятностью 99.9(9)% такого метода нет. Файловые системы применяющиеся сейчас известны уже очень давно. Был бы метод - давно он был бы известен.
:)
Но Саша может (если займётся) изобрести что-то что позволит ускорить поиск. :)
Игорь Шевченко (2009-06-10 20:50:00) [13]Riply © (10.06.09 20:41) [25]
А собственно, перечень для поиска известен - API
Riply (2009-06-10 20:41:00) [14]> [22] Игорь Шевченко © (10.06.09 20:04)
> Я к другому - насколько мне известно, в системе не существует метода,
> который просматривает только каталоги, игнорируя при этом остальные файлы.
Я бы выразилась более осторожно: пока, мы не сумели найти такой метод :)
QAZ (2009-06-10 20:24:00) [15]уточню\упрощу вопрос
есть ли кашерный способ узнать что в папке есть папка ?
QAZ (2009-06-10 20:23:00) [16]
> Я к другому - насколько мне известно
ну канешно :) теперь уже известно
Игорь Шевченко (2009-06-10 20:04:00) [17]Riply © (10.06.09 19:44) [21]
> Но у нее есть очень занимательный параметр: RetSingleEntry:
> BOOLEAN;
Да, сколько порций fileinformation возвращать за один вызов.
> выбрать для сканирования соответствующий FILE_INFORMATION_CLASS,
> например, FileDirectoryInformation
> (там, вроде, для подобного сканирования аж четыре разных
> FILE_INFORMATION_CLASS)
говорят, 36, но тех, которые возвращают атрибуты, наверное меньше.
> 2. установить RetSingleEntry в False
Это определяет, сколько раз придется вызвать функцию для полного сканирования каталога.
Я к другому - насколько мне известно, в системе не существует метода, который просматривает только каталоги, игнорируя при этом остальные файлы.
Riply (2009-06-10 19:44:00) [18]> [17] Игорь Шевченко © (10.06.09 18:07)
> согласно Неббету, NtQueryDirectoryFile - это то, во что превращается вызов FindFirst
Совершенно верно.
Но у нее есть очень занимательный параметр: RetSingleEntry: BOOLEAN;
Если подготовиться примерно таким образом:
1. выбрать для сканирования соответствующий FILE_INFORMATION_CLASS, например, FileDirectoryInformation
(там, вроде, для подобного сканирования аж четыре разных FILE_INFORMATION_CLASS)
2. установить RetSingleEntry в False
3. если рекурсия - использовать Handle родителя для открытия вложенного объекта
4. всякие мелочи :)
то выигрыш может оказаться ~ 50% на индексированном диске и ~ 25% на неиндексированном.
Игорь Шевченко (2009-06-10 19:15:00) [19]QAZ (10.06.09 18:37) [18]
В файловой системе каталог - это тот же файл. Чтобы найти вложенные каталоги, надо пересмотреть все содержимое текущего
QAZ (2009-06-10 18:41:00) [20]а VCLными FindFirst и FindNext используют цикл в FindMatchingFile для фильтровки