Антивирус ПрогрессБар - PullRequest
1 голос
/ 04 ноября 2011

Мне нужно добавить индикатор прогресса в мой AV, и проблема в том, что я не знаю заранее, сколько файлов нужно сканировать. Так что я не знаю общего количества. Если я считаю файлы, которые нужно отсканировать, затем программная пауза на некоторое время, так как она должна пройти через множество файлов, а в случае полного сканирования системы, эта пауза, если длительная, что нежелательно. Поэтому я отбросил этот код. Я слышал, что avast динамически изменяет значение индикатора выполнения, т.е. если значение приближается к 100, и для сканирования найдено больше файлов, то значение увеличивается до 50. Кодирование на C #.

Ответы [ 4 ]

1 голос
/ 04 ноября 2011

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

Использовать потоки;один для поиска файлов и добавления их местоположений в очередь, а также для обновления общего количества файлов.

другой для сканирования и обновления количества сканированных файлов.обновлять себя на основе этого;поэтому верхняя граница будет постоянно увеличиваться ... или становиться более точной.

1 голос
/ 04 ноября 2011

Просто посчитайте папки глубиной в 5 уровней и рассчитайте прогресс, основываясь на том, сколько из этих папок было отсканировано.Увеличьте глубину, чтобы увеличить точность (за счет времени предварительного расчета).Используйте эту статью, чтобы узнать, как максимально быстро перечислить каталоги: MSDN Как: перечислять каталоги и файлы

0 голосов
/ 04 ноября 2011

Поскольку AV-сканирование должно происходить регулярно, вы можете вспомнить, сколько файлов было в последнем сканировании, а затем добавить его на 5%? Это дало бы пользователю приблизительное представление о том, сколько времени потребуется, не выполняя актуальную полную проверку прямо сейчас. Чтобы получить точное число для первого сканирования, вам нужно будет выполнить полный поиск в каталоге и перенести описанную вами паузу. Что касается пользовательских отдельных папок, вы можете либо сохранить # файлов для первых 2-3 уровней папок, а затем просто выполнить сканирование каталогов ниже этого значения, поскольку в каждом подкаталоге будет уменьшенное количество файлов.

0 голосов
/ 04 ноября 2011

Я бы порекомендовал проверить, сколько места занято на диске, и оценить количество файлов по плотности: количество файлов на ГБ. Сначала вы должны сделать предположение, сколько файлов хранится в одном ГБ (для моей системы это 3860). Во время сканирования вы узнаете, какова реальная плотность отсканированного жесткого диска, чтобы вы могли настроить количество файлов.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...