Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.01 c
4-73920
Dmk
2002-08-02 23:39
2002.09.23
---|Ветка была без названия|---


1-73643
grigorys
2002-09-12 17:09
2002.09.23
VB И DELPHI


7-73906
Agran
2002-07-15 13:10
2002.09.23
Как запретить пользователю двигать курсором


6-73806
Husan
2002-07-18 17:16
2002.09.23
По сетям


1-73585
****
2002-09-10 12:24
2002.09.23
Событие





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский