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

Вниз

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

 
oleg1963lora   (2009-12-09 09:11) [0]

Здравствуйте! Нужно скопировать файлы в лок. сети.
Файлы порядка 50-100 Мбайт. Очень хочется подцепить к этому делу
ProgressBar для визуализации процесса, но как это реализовать?
Копировать побайтово - за это время солнце погаснет.


 
Рамиль ©   (2009-12-09 09:13) [1]


> Копировать побайтово - за это время солнце погаснет.

Копируй по 4 Кб.


 
brother ©   (2009-12-09 09:14) [2]

1. копировать надо блоками (в справке по BlockRead/BlockWrite) есть хороший пример, а прогресс вообще просто:
у прогресса min=0, max= filesize, progress = кол-во прочитаных блоков * размер блока


 
oleg1963lora   (2009-12-09 09:25) [3]

Хорошая фунция, слов нет. А как быть с размером файла?
38 457 267 mod 128 (256, 1024 и тд.) <> 0           >:(((

Если только прочитать атрибуты исходного файла и записать их в целевой?


 
brother ©   (2009-12-09 09:26) [4]

ты о чем сейчас?


 
Anatoly Podgoretsky ©   (2009-12-09 09:30) [5]

> oleg1963lora  (09.12.2009 09:11:00)  [0]

Где твой код, что ли ты пробовал?


 
MBo ©   (2009-12-09 09:39) [6]

CopyFileEx позволяет прогресс прицепить


 
oleg1963lora   (2009-12-09 09:40) [7]


> brother ©   (09.12.09 09:26) [4]
> ты о чем сейчас?

Хотелось бы получить файл равным исходному.
Не только по содержанию, а и по виду (размер, дата последнего изменения и прочее ...


 
oleg1963lora   (2009-12-09 09:41) [8]


> MBo ©   (09.12.09 09:39) [6]
> CopyFileEx позволяет прогресс прицепить

Спасибо, сейчас попробую.


 
Плохиш ©   (2009-12-09 10:40) [9]

Всё-таки придётся программиста нанимать.


 
oleg1963lora   (2009-12-09 11:23) [10]

Сам с усами! Спасибо 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. Загляните между делом


 
MBo ©   (2009-12-09 13:16) [11]

Аккуратнее будет не использовать Form1 напрямую, а передавать через lpData форму или ProgressBar.
И непонятно, зачем Position сначала устанавливать, потом в 0 сбрасывать


 
oleg1963lora   (2009-12-09 15:07) [12]


> И непонятно, зачем Position сначала устанавливать, потом
> в 0 сбрасывать

Типа: "УСЁ блин.Я-а-а,Ик.Скопировалась!" :-)
И подскажите пожалуйста где можно почитать про IpData. Судя по IP это
указатель на данные. А дальше?


 
MBo ©   (2009-12-09 16:14) [13]

>это указатель на данные
Это возможность передать некую информацию.
Поскольку тип указатель, то можно присвоить нужный объект, чего в данном случае достаточно.
Если нужно много информации передавать, то указатель на данные.
Если одно число - то его можно привести к типу указателя.



Страницы: 1 вся ветка

Текущий архив: 2010.01.31;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.011 c
4-1227704906
Mamed
2008-11-26 16:08
2010.01.31
Load Fond


6-1211636100
may be I am noob...
2008-05-24 17:35
2010.01.31
Подключение


2-1260362586
lorik08
2009-12-09 15:43
2010.01.31
помогите с графикой


1-1235132567
dmitry1208197320
2009-02-20 15:22
2010.01.31
Поддержка темы XP компонентом TTreeView


2-1260256683
Леонид Артюхов
2009-12-08 10:18
2010.01.31
Как вывести на Канву, не затирая Картинку по дефолту?