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-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 для фильтровки


Страницы:   1 2

Наверх

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