Поиск файлов и папок... Опять он...

Тема в разделе "WASM.BEGINNERS", создана пользователем sivsoft, 27 дек 2008.

  1. sivsoft

    sivsoft New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    82
    Доброго всем времени суток!
    Честно говоря работал с файловой системой очень мало, потому что в основном приложения создаю для баз данных. Но вот уже давно не дает покоя вопрос: почему поиск в Винде такой тормозной??? В свое время писал под ZX-Spectrum - понятно там уже все морально устарело, так вот - там есть на нулевой дорожке каталог - считал его и все никаких проблем с поиском. Здесь же мама не горюй... :o Как я понимаю в файловой системе есть таблица MFT - в чем проблема считать эту таблицу и найти файлы? Так нет все реализуем через FindFirst-FindNext - не знаю как-то странно (знаю и про NtQueryDirectoryFile - но там опять идея та же). Получается для того чтобы просто вывести список файлов и директорий - винт шурудит так как будто ему собрались оторвать башку.
    Перечитал массу тем. Читал разные статьи, но так и не пойму:
    - Почему не искать через таблицу MFT? Или я не понимаю организации файловой системы - тогда плиз, объясните.
     
  2. only

    only New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2008
    Сообщения:
    147
    И FFFile и FNFile вызывают NtQueryDirectory.
    И поиск не будет идти по всему винту, это было бы как минимум странно если бы эти данные не хранились отдельно, обновляясь при каких-то событиях. Есть ведь кеш ФС.
     
  3. sivsoft

    sivsoft New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    82
    only
    нет по всему винту наверное не идет - но во время поиска шурудит
    Есть - но поиск будет быстрее намного лишь после того как прошурудишь все папки с помощью FFFile - FNFile
     
  4. Senslis

    Senslis New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    1
    Это что-то связанное с внутренней логикой файловой системы. Надо смотреть на сайте макрософта
     
  5. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Размер MFT может достигать десятков, а то и сотен мегабайт, так что полный перебор быстрее не будет.
    Второе, файлы в МFT хранятся без пути, есть только ссылка на родительский каталог.
    Т.е. для каждой записи в MFT нужно рекурсивно строить полный путь, чтобы узнать наш это файл или нет.
    Получается, что для перебора файлов в одной директории нужно перебрать все файлы на ниске.
     
  6. sivsoft

    sivsoft New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    82
    Partner
    а чего такое построение? С первого взгляда кажется идиотским...
     
  7. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Посмотри второй раз.

    Не вижу ничего идиосткого. NTFS очень удачная файловая система.
     
  8. sivsoft

    sivsoft New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    82
    в чем сложность была - распределить по таблицам:
    одна таблица например:
    id, name, attr, parent
    поиск в подобном выполняется намного быстрее - да и зачем поиск считать таблицу и далее произвести манипуляции с нужными данными и все... Открытие директорий тоже было бы быстрее - вообще мнгновенным...