![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Посоветуйте. Копирование файлов.
oleg1963lora © (2009-12-09 09:11:00)Здравствуйте! Нужно скопировать файлы в лок. сети.
Файлы порядка 50-100 Мбайт. Очень хочется подцепить к этому делу
ProgressBar для визуализации процесса, но как это реализовать?
Копировать побайтово - за это время солнце погаснет.
MBo (2009-12-09 16:14:00) [1]>это указатель на данные
Это возможность передать некую информацию.
Поскольку тип указатель, то можно присвоить нужный объект, чего в данном случае достаточно.
Если нужно много информации передавать, то указатель на данные.
Если одно число - то его можно привести к типу указателя.
oleg1963lora (2009-12-09 15:07:00) [2]
> И непонятно, зачем Position сначала устанавливать, потом
> в 0 сбрасывать
Типа: "УСЁ блин.Я-а-а,Ик.Скопировалась!" :-)
И подскажите пожалуйста где можно почитать про IpData. Судя по IP это
указатель на данные. А дальше?
MBo (2009-12-09 13:16:00) [3]Аккуратнее будет не использовать Form1 напрямую, а передавать через lpData форму или ProgressBar.
И непонятно, зачем Position сначала устанавливать, потом в 0 сбрасывать
oleg1963lora (2009-12-09 11:23:00) [4]Сам с усами! Спасибо MBo, нашел описание функции CopFileEx и примерчик:
function Progress(TotalFileSize,
TotalBytesTransferred,
StreamSize,
StreamBytesTransferred:LARGE_INTEGER;
dwStreamNumber,
dwCallbackReason:DWORD;
hSourceFile,
hDestinationFile:THandle;
lpData:pointer):DWORD; stdcall;
begin
Form1.ProgressBar1.Position:=
Round((TotalBytesTransferred.QuadPart/TotalFileSize.QuadPart)*100);
result:=PROGRESS_CONTINUE;
Form1.ProgressBar1.Position:=0;
end;
и собственно копирование
CopyFileEx(PChar(SourceFile),PChar(TargetFile),@Progress,nil,nil,0);
Тих и счастлив как пописавший малыш :-)))
Кстати много интересной информации нашел на
http://h-ahmet.narod.ru/source.htm.Загляните между делом
Плохиш (2009-12-09 10:40:00) [5]Всё-таки придётся программиста нанимать.
oleg1963lora (2009-12-09 09:41:00) [6]
> MBo © (09.12.09 09:39) [6]
> CopyFileEx позволяет прогресс прицепить
Спасибо, сейчас попробую.
oleg1963lora (2009-12-09 09:40:00) [7]
> brother © (09.12.09 09:26) [4]
> ты о чем сейчас?
Хотелось бы получить файл равным исходному.
Не только по содержанию, а и по виду (размер, дата последнего изменения и прочее ...
MBo (2009-12-09 09:39:00) [8]CopyFileEx позволяет прогресс прицепить
Anatoly Podgoretsky (2009-12-09 09:30:00) [9]> oleg1963lora (09.12.2009 09:11:00) [0]
Где твой код, что ли ты пробовал?
brother (2009-12-09 09:26:00) [10]ты о чем сейчас?
oleg1963lora (2009-12-09 09:25:00) [11]Хорошая фунция, слов нет. А как быть с размером файла?
38 457 267 mod 128 (256, 1024 и тд.) <> 0 >:(((
Если только прочитать атрибуты исходного файла и записать их в целевой?
brother (2009-12-09 09:14:00) [12]1. копировать надо блоками (в справке по BlockRead/BlockWrite) есть хороший пример, а прогресс вообще просто:
у прогресса min=0, max= filesize, progress = кол-во прочитаных блоков * размер блока
Рамиль (2009-12-09 09:13:00) [13]
> Копировать побайтово - за это время солнце погаснет.
Копируй по 4 Кб.