Сканирование и способы ускорить?

Тема в разделе "WASM.A&O", создана пользователем wertyman, 25 апр 2007.

  1. wertyman

    wertyman Member

    Публикаций:
    0
    Регистрация:
    13 дек 2006
    Сообщения:
    74
    Уважаемые, посоветуйте что нить в данной ситуации...
    Нужно сканировать все файлы, что найду, но нужно знать сканировать их заранее или нет, то есть, если сканировали их ранее ( даже если программа перезапускалась ), пропускать... Но делать это надо быстро.
    Сначала, на скорую руку сделал тупой алгоритм, что скидываю все пути к файлам в один файл, и перед тем, как читать файл, просчитываю файл на наличие этого пути там, и если находим, то не сканим... Соответственнно, скорость ужасная, особенно, когда файл уже метр :)

    Так вот, как лучше сделать ? я решил сразу что сделать нужно хеши имен файлов в связке с размером... Это не так важно сейчас для меня, что я некоторые файлы буду сканировать несколько раз... Эффективно ли это будет, или лучше другие какие способы есть ?

    Спасибо.
     
  2. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Может лучше оставлять файл с необходимыми данными (контр. суммами и признаком, обрабытывался ли файл ранее) в каждом каталоге? (наподобие chklist.ms :)
     
  3. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    изменять время доступа к файлам ;) Оно один фиг изменится, однако ты можешь вместо секунд и минут поставить своё значение X : 29 : 10 например.
     
  4. Ultrin Faern

    Ultrin Faern New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2006
    Сообщения:
    170
    А скорость поганая, потому что ты наверное последовательно по файлу ходишь.

    Варианты ускорения:
    1) В файле хранить отсорированный список файлов - и потом пользоваться двоичным поиском.
    2) Использовать какую-нибудь простенькую базу данных.
     
  5. Stub

    Stub New Member

    Публикаций:
    0
    Регистрация:
    11 май 2004
    Сообщения:
    311
    Адрес:
    Siberia
    имхо, только метить уже просканированные файлы (один из способов предложил n0name, еще как вариант - менять дату создания/время) или как делаешь ты (только брать хеш от полного пути к файлу, т.к. тогда можно не учитывать размер файла или учитывать, что сделает алгоритм более точным), но учитывая предложение от Vov4ick'а (т.е. оставлять файл с необходимыми данными в каждом каталоге).
     
  6. wertyman

    wertyman Member

    Публикаций:
    0
    Регистрация:
    13 дек 2006
    Сообщения:
    74
    Спасибо всем, кто откликнулся.
    Вариант с индексным файлом, не устраивает по несскольким причинам
    1) Палевно
    2) Каталогов порой не меньше чем файлов :) но скорость все равно увеличится конечно, за счет того, что не придется считать большие объемы
    Но можно попробывать...

    Вариант с изменением времени доступа, интересно... Как вариант, отлично

    А на всякий, какой алгоритм хеширования подсказать можете ? Как создать хеш например 4х байтный ?
    Все это дело буду хранить в бинарном файле, оптимизация не обязательно, если будут тормоза, уже можно будет подумать...
     
  7. wertyman

    wertyman Member

    Публикаций:
    0
    Регистрация:
    13 дек 2006
    Сообщения:
    74
    заморачиваться сильно мне не надо с алгоритмом, цель просто проходить винт как можно быстрее, но, чтобы в след. раз не приходилось проверенные файлы проверять...
    а возможно ведь, писать куда нить точку останова сканирования, и потом просто так же начинать с нее продолжать сканирование ? Но для этого как я понимаю придется все равно начинать с самого начала сканирование, но все файлы пропускать до тех пор, пока не дойду до того, на котором прошлый раз остановился ? На сколько точный такой способ будет ? Есть ли вероятность, что пропущу какие нить файлы ? ( не учитывается новосозданые или измененые )
     
  8. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    CRC32
     
  9. Ultrin Faern

    Ultrin Faern New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2006
    Сообщения:
    170
    Новомодные антивирусы используют потоки NTFS для хранения доп информации. Там же можно и хранить контрольную сумму. (только все-таки не храни ее напрямую, хотя-бы по-XOR ее)
     
  10. Perre

    Perre New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2007
    Сообщения:
    100
    Если сканирование производить по имени (путь файла и имя)
    И если в файле будут данные тоже сортированные по имени, тогда можно сделать так :
    Если мы нашли файл в Кеше , запомнили адрес следующего файла (в кеше), и следующий поиск начинаем уже от тудова
     
  11. Perre

    Perre New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2007
    Сообщения:
    100