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