Форум: "Основная";
Текущий архив: 2002.09.23;
Скачать: [xml.tar.bz2];
ВнизПрогресс. Найти похожие ветки
← →
Чужой, но не свой (2002-09-08 23:42) [0]Допустим есть ProgressBar.
Идёт процесс поиска файлов на компьютере.
Как сделать так чтоб этот самый ProgressBar показывал сколько осталось до завершения?
← →
Kettle of delphi (2002-09-09 00:06) [1]Для этого нужно знать общее количество файлов. А чтобы знать общее количество файлов, нужно каждый из них "потрогать"... ) Думаю, в такой ситуации используется метод "примерного" рассчета. Примерно так: узнать занятый объем диска, а потом вычислить примерное количество файлов статистическим методом. Но это ОЧЕНЬ примерно. Так, например, у меня может быть 30000 файлов в Temporary Internet Files и занимают они примерно такой же объем, как и половина одного видеофайла (*.avi)... Больше ничего в голову не приходит :)
← →
Taifur (2002-09-09 07:11) [2]сам должен понять - как ты узнаешь сколько ворон ещё тебе нужно посчитать чтобы посчитать их всех - только посчитав всех
← →
Чужой, но не свой (2002-09-09 16:09) [3]Вы так говорите как будто мало таких программ...
Smart Cleaner например ищет ненужные файлы (*.tmp, *.bak и т.д.)и удаляет их о всего компа, при этом постоянно в строке состояния пишет сколько осталось до завершения поиска. Он ведь не знает сколько осталось. И довольно точно работает!
← →
pasha_golub (2002-09-09 16:11) [4]И ты пиши, ведь юзер не знает сколько осталось! 8-))
← →
Чужой, но не свой (2002-09-10 14:03) [5]Конечно очень смешно, но надо программа чтобы работала по человечески. Нужно знать время до завершения операции.
← →
lenin (2002-09-10 14:10) [6]
> Чужой, но не свой (09.09.02 16:09)
> Вы так говорите как будто мало таких программ...
> Smart Cleaner например ищет ненужные файлы (*.tmp, *.bak
> и т.д.)и удаляет их о всего компа, при этом постоянно в
> строке состояния пишет сколько осталось до завершения поиска.
> Он ведь не знает сколько осталось. И довольно точно работает!
А ты думаешь, что он пишет точное время. Сделай как говорит Kettle of delphi (09.09.02 00:06).
← →
Smithson (2002-09-10 14:45) [7]На самомо деле достаточно просто сделать рекурентный FindFirst-FindNext и просто ПОДСЧИТАТЬ, сколько таких файлов. Это будет быстрее, чем удаление файлов. А потом, в следующем цикле, удалять файлы.
← →
lenin (2002-09-10 14:59) [8]
> Smithson © (10.09.02 14:45)
На сколько я понял задача заключаеться в поиске, а не в удоление файлов.
← →
KSergey (2002-09-10 15:18) [9]Скорее всего подобные программы работают примерно так (на сколько могу судить по внешним проявлениям; подходит для пробегания именно по всему диску ну или по довольно большой его части): пробегают по каталогу (например, по корневому, если предстоит перебрать весь диск) и высчитывают кол-во папок плюс прикидывают что-то на собственно файлы. Делят общей диапазон прогрессбара на колво папок и вперед. Пробегаю файлики. Теперь входим в превую папку, там опять перебираем все папки и в соответствии с их кол-вом корректируем тек. положение и максимум (но на экране индикатор должен остаться в том-же положении! недавно так вот извращался, но не про файлы) обрабатываем файлы из этой папки, проходим глубже, если есть куда ну и т.д. Примерно так, наверное. Т.е. часто же видно, как при больших вложениях такие индикаторы вдруг притормаживаются и время завершения неумолимо начинает увеличиваться? ;) Это все касается процессов, где собственно проьегание занимает основное время. В архиваторе несколько проще: там наибольшее время занимает собственно архвирование, можн просто пробежать и посчитать объем...
PS А вообще-то, неужели "не совой" не приходилось ждать по пол-часа, когда винды пишут "до завершения осталось 2 минуты"? ;) Так что вся эта эмпирика-экстраполяция всегда даст оочень приблизительный результат, к этому надо быть сразу готовым.
← →
Anatoly Podgoretsky (2002-09-10 15:41) [10]Вместо прогресс бар, стоит просто показывать количество обработанных файлов и каталогов, весьма прилично
← →
Song (2002-09-10 18:33) [11]А можно сделать так: прибавлять сначала по единице по таймеру через секунду, но чем ближе к концу прогрессбара тем за более большое время прибавлять единицу т.е. прогрессбар будет всё время стремиться к правой границе, но так никогда до неё и не дойдёт. А когда поиск закончится, можно сделать With ProgressBar1 Do Position:=Max;
← →
KSergey (2002-09-11 09:37) [12]
> Song © (10.09.02 18:33)
;)) Есть, однако, опасность, что он так никогда и не дойдет до конца ;)
← →
reptile (2002-09-11 10:06) [13]Вообще то я пишу на C++, но я думаю, что принцип тот же. Узнаешь сколько места занято на диске в байтах. Потом при нахождении файла просто изменяешь положение прогресса, соответствующий размеру файла и т.д.
← →
KSergey (2002-09-11 10:09) [14]reptile (11.09.02 10:06)
Боюсь, что такой метод подходит только для Си, сами понимаете почему... ;)
← →
reptile (2002-09-11 10:14) [15]Конкретно, без шуток, ПОЧЕМУ???
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.09.23;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.008 c