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

Тема в разделе "Delphi - Система", создана пользователем Barmutik, 10 фев 2005.

Статус темы:
Закрыта.
  1. Barmutik

    Barmutik Гость

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

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

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

    zubr Гость

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

    Barmutik Гость

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

    zubr Гость

    Вот только что попробовал, правда в C++Builder (на работе Delphi не стоит) - определяет только каталоги.
    Код (Text):
    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 сделал 'путь к каталогу\*.'
     
  5. Barmutik

    Barmutik Гость

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

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

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

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

    zubr Гость

    Рад был помочь :angry:
     
  7. Barmutik

    Barmutik Гость

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

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

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

    zubr Гость

    Хм... Надо подумать.
     
  9. zubr

    zubr Гость

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

    Barmutik Гость

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

    zubr Гость

    FindFirstFileEx я тоже пробовал, похоже Fat32 не поддерживает фильтр FindExSearchLimitToDirectories
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей