Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Скопировать файл (группу файлов) Добавлено: 03.09.06 03:16  

Автор вопроса:  Arseny | ICQ: 298826769 
Господа! А можно ли скопировать файл, дабы прогрессбар отображал сие чудное действие? (VB6)

Ответить

  Ответы Всего ответов: 12  

Номер ответа: 1
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #1 Добавлено: 03.09.06 03:24
Конечно можно.

Ответить

Номер ответа: 2
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #2
Добавлено: 03.09.06 08:05
У прогесбара делаешь MAX = 2 * (длина файла), затем построчно открываешь файл и отображаешь сие действие на пргс-баре, затем сохраняешь построчно и отображаешь сие действие на прогес -баре.

Ответить

Номер ответа: 3
Автор ответа:
 Calhoon



ICQ: 789764 

Вопросов: 90
Ответов: 230
 Web-сайт: 4elovekssn.blog.ru
 Профиль | | #3
Добавлено: 03.09.06 08:35
Зачем же построчно, читать файл блоками по несколько байт, и с каждым чтением прибавлять по значению на прогресс-баре... Прогрессбар.max = <длина файла> / размер блока. А если нужно отбражать проценты, то max = 100, и вычислять проценты после чтения...

Ответить

Номер ответа: 4
Автор ответа:
 Calhoon



ICQ: 789764 

Вопросов: 90
Ответов: 230
 Web-сайт: 4elovekssn.blog.ru
 Профиль | | #4
Добавлено: 03.09.06 09:02
Например:

PBar.max = 100
PBar.value = 0
LenF = FileLen(<файл>;)
1. Открываешь файл в режиме бинари
/Open ... for binary as #1/
2. Открываешь файл-приемник
/Open ... for Append as #2/
3. Читаешь блоками, сохраняешь в переменную.
/strBuffer = Input(128, #1) 'читаем по 128 байт/
4. Записываешь в файл-приемник
/Print #1, strBuf;/
5. Вычисляешь значение прогресс-бара
/PBar.value = 128 * 100 / LenF
6. цикл с пункта 3

Замечания:
1. Размер блоков подбери сам оптимальную длину экспериментально. Думаю, стоит читать где-то по 200 кб - файл такого размера копируется моментально, смыла нет тормозить копирование прогресс-баром. Сам таким не занимался, не знаю, сколько лучше взять.
2. Если проценты показывать не нужно, имхо, нужно ставить PBar.max = длинаФайла/Блок, и каждый раз значение увеличивать на 1. Короче, обновление PBar'a нужно еще оптимизировать, т.к. он тормозит процесс....

Ответить

Номер ответа: 5
Автор ответа:
 Arseny



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #5 Добавлено: 03.09.06 12:39
Про копирование бинарно я конечно думал, но, извентиляюсь, не слишком ли это муторно? А ежели папочка с файлами перевалит за гигабайты и 10-и - 100-и тысяч?
А нет ли Api'шных ф-ий?

Ответить

Номер ответа: 6
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #6 Добавлено: 03.09.06 17:52
Про копирование бинарно я конечно думал, но, извентиляюсь, не слишком ли это муторно? А ежели папочка с файлами перевалит за гигабайты и 10-и - 100-и тысяч?
А нет ли Api'шных ф-ий?


Есть АПИ CopyFileEx.

вообще, откуда у тебя соображения что АПИ как-то по-другому копируют?

Код копирования на .NET у меня работает не медленнее АПИ-шных функций.

Ответить

Номер ответа: 7
Автор ответа:
 ENIX



ICQ: 238819245 

Вопросов: 9
Ответов: 76
 Профиль | | #7 Добавлено: 03.09.06 22:43
SHFileOperation функция по мне так поинтереснее

Ответить

Номер ответа: 8
Автор ответа:
 Arseny



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #8 Добавлено: 04.09.06 00:46
вообще, откуда у тебя соображения что АПИ как-то по-другому копируют?

Ощущение, что пока пашет цикл на ВБ можно скопировать пару таких же файлов... :(

Ответить

Номер ответа: 9
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #9 Добавлено: 04.09.06 01:38
Копируй не по байтам, а блоками.
Причем не по 128 байт, а по мегабайту и более.

Ответить

Номер ответа: 10
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #10
Добавлено: 04.09.06 08:12
Если по мегабайту, то не очень точный прогресс может быть (если
копировать на какой-нибудь медленный внешний носитель или вообще на
другой комп в локальной сети). Лучше все же поменьше... Скажем, 64к.

Ответить

Номер ответа: 11
Автор ответа:
 Arseny



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #11 Добавлено: 04.09.06 09:07
Зер гут, попробую.

Спасибо всем! :)

Ответить

Номер ответа: 12
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #12 Добавлено: 04.09.06 11:23
Ну, не знаю. Изобретать велосипеды как-то пошло уже...
На самом деле лучше заюзать вышеуказанные CopyFileEx и SHFileOperation, правда вторая имеет некоторые ограничения и геморна в использовании, а первая отсутствует в 98.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам