Уважаемые, посоветуйте что нить в данной ситуации... Нужно сканировать все файлы, что найду, но нужно знать сканировать их заранее или нет, то есть, если сканировали их ранее ( даже если программа перезапускалась ), пропускать... Но делать это надо быстро. Сначала, на скорую руку сделал тупой алгоритм, что скидываю все пути к файлам в один файл, и перед тем, как читать файл, просчитываю файл на наличие этого пути там, и если находим, то не сканим... Соответственнно, скорость ужасная, особенно, когда файл уже метр Так вот, как лучше сделать ? я решил сразу что сделать нужно хеши имен файлов в связке с размером... Это не так важно сейчас для меня, что я некоторые файлы буду сканировать несколько раз... Эффективно ли это будет, или лучше другие какие способы есть ? Спасибо.
Может лучше оставлять файл с необходимыми данными (контр. суммами и признаком, обрабытывался ли файл ранее) в каждом каталоге? (наподобие chklist.ms
изменять время доступа к файлам Оно один фиг изменится, однако ты можешь вместо секунд и минут поставить своё значение X : 29 : 10 например.
А скорость поганая, потому что ты наверное последовательно по файлу ходишь. Варианты ускорения: 1) В файле хранить отсорированный список файлов - и потом пользоваться двоичным поиском. 2) Использовать какую-нибудь простенькую базу данных.
имхо, только метить уже просканированные файлы (один из способов предложил n0name, еще как вариант - менять дату создания/время) или как делаешь ты (только брать хеш от полного пути к файлу, т.к. тогда можно не учитывать размер файла или учитывать, что сделает алгоритм более точным), но учитывая предложение от Vov4ick'а (т.е. оставлять файл с необходимыми данными в каждом каталоге).
Спасибо всем, кто откликнулся. Вариант с индексным файлом, не устраивает по несскольким причинам 1) Палевно 2) Каталогов порой не меньше чем файлов но скорость все равно увеличится конечно, за счет того, что не придется считать большие объемы Но можно попробывать... Вариант с изменением времени доступа, интересно... Как вариант, отлично А на всякий, какой алгоритм хеширования подсказать можете ? Как создать хеш например 4х байтный ? Все это дело буду хранить в бинарном файле, оптимизация не обязательно, если будут тормоза, уже можно будет подумать...
заморачиваться сильно мне не надо с алгоритмом, цель просто проходить винт как можно быстрее, но, чтобы в след. раз не приходилось проверенные файлы проверять... а возможно ведь, писать куда нить точку останова сканирования, и потом просто так же начинать с нее продолжать сканирование ? Но для этого как я понимаю придется все равно начинать с самого начала сканирование, но все файлы пропускать до тех пор, пока не дойду до того, на котором прошлый раз остановился ? На сколько точный такой способ будет ? Есть ли вероятность, что пропущу какие нить файлы ? ( не учитывается новосозданые или измененые )
Новомодные антивирусы используют потоки NTFS для хранения доп информации. Там же можно и хранить контрольную сумму. (только все-таки не храни ее напрямую, хотя-бы по-XOR ее)
Если сканирование производить по имени (путь файла и имя) И если в файле будут данные тоже сортированные по имени, тогда можно сделать так : Если мы нашли файл в Кеше , запомнили адрес следующего файла (в кеше), и следующий поиск начинаем уже от тудова