Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Посоветуйте. Копирование файлов.


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 Кб.


Наверх

Титульная страница Поиск, карта сайта Написать письмо