• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Как быстро узнать если у папки вложенные подпапки?

  • Автор темы Barmutik
  • Дата начала
Статус
Закрыто для дальнейших ответов.
B

Barmutik

Важное слово "быстро"...

Почему встал вопрос ... если есть каталог и в нём 50.000 файлов и 1 папка, то процесс узнавания есть ли эта подпапка может занять ОЧЕНЬ много времени...

Как можно быстрее узнать?
 
Z

zubr

А функция FindFirst с Attr=faDirectory не помогает?
 
B

Barmutik

Неа ... не помогает .. если посмотреть как она реализована и почитать MSDN ... то легко заметить что эта функция практически плюёт с высокой колокольни на этот атрибут :angry: И возвращает она файлы в алфавитном порядке . и если файлов 50.000 скажем с цифровыми именами а подпапка с именем на буквы .. но ждать пока она найдёт подпапку будем очень долго :( ... а надо быстро ...
 
Z

zubr

Вот только что попробовал, правда в C++Builder (на работе Delphi не стоит) - определяет только каталоги.
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TSearchRec f;
AnsiString s;
if (!FindFirst("c:\\*.", faDirectory, f))
{
  s=f.Name;
  while (!FindNext(f))
  {
   s=f.Name;
  }

}
}
Получилось, когда параметр Patch сделал 'путь к каталогу\*.'
 
B

Barmutik

Супер!!!! Сенкс!!! Магическая комбинация *. !!!!

Я пробовал *.* млм просто * ... и без шансов ... а вот именно в такой комбинации ... всё просто супер ... в 100 раз быстрее ...

Правда есть малость ограничение .. также находит файлы без расширения .. но это мелочь вообщем ...!!!

Спасибо реально большое!! :angry: :(
 
B

Barmutik

Только вот нашлась побочная штука этого метода :)

Если каталог имеет в своём имени точку то данный вариант не работает ;) Оне не находит такие каталоги ;)

Может ещё какие варианты есть ?
 
Z

zubr

Не знаю... Похоже остается только на низком уровне решать данную проблему - делать что то типа драйвера, по крайней мере получить доступ к файловой таблице.
 
B

Barmutik

:) Вот и я не знаю ... пробовал FindFirstEx.. тоже не помогает ... так это вроде и есть обращение сразу к дисковой системе...
 
Z

zubr

FindFirstFileEx я тоже пробовал, похоже Fat32 не поддерживает фильтр FindExSearchLimitToDirectories
FindExSearchLimitToDirectories This is an advisory flag. If the file system supports directory filtering, the function searches for a "file" that matches the specified filename and that is a directory. If the file system does not support directory filtering, this flag is silently ignored.The lpSearchFilter parameter must be NULL when this search operation is used.If you want directory filtering, use this flag on all file systems, but be sure to examine the file attribute data stored into *lpFindFileData to determine whether the function has indeed returned a handle to a directory.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!