Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.23;
Скачать: CL | DM;

Вниз

Прогресс.   Найти похожие ветки 

 
Чужой, но не свой   (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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.013 c
7-73911
ValeX
2002-07-11 18:39
2002.09.23
вопрос по RS232


3-73515
saf
2002-08-30 19:57
2002.09.23
Вылетают таблици


3-73545
_dron_
2002-09-03 10:00
2002.09.23
Как добавить ODBС драйвер Paradox?


1-73652
Mars
2002-09-12 16:19
2002.09.23
Как переместить данные после использования SetScrollPos?


4-73922
dera
2002-08-04 09:10
2002.09.23
Как добавить свой пункт в меню пуск?