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

Вниз

CopyFileEx   Найти похожие ветки 

 
LiqS   (2005-08-28 19:49) [0]

Можете написать пример использования функции CopyFileEx ?
Как на сколько процентов скопирован файл?


 
Anatoly Podgoretsky ©   (2005-08-28 20:09) [1]

Можем


 
Турист   (2005-08-28 20:09) [2]

>LiqS   (28.08.05 19:49)  
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=2133


 
Джо ©   (2005-08-28 21:17) [3]

Когда-то уже сюда постил.

unit Unit2;

interface
uses Windows, SysUtils, Classes, ComCtrls;

type
 IFileCopier = interface
   ["{9ACEC816-5A3F-4BA4-95A2-B3C8CE08B82D}"]
   procedure Copy;
   procedure SetProgressBar (const AProgressBar: TProgressBar);
   property ProgressBar: TProgressBar write SetProgressBar;
 end;

 TFileCopier = class (TInterfacedObject, IFileCopier)
 private
   FSource,
   FDest: string;
   FProgressBar: TProgressBar;
   procedure SetPosition (APos: Int64);
 public
   constructor Create (const ASource, ADest: string);
   procedure Copy;
   procedure SetProgressBar (const AProgressBar: TProgressBar);
 end;

implementation

function CopyCallBack (
 TotalFileSize,
 TotalBytesTransferred,
 StreamSize,
 StreamBytesTransferred: Int64;
 StreamNumber,
 CallBackReasom: DWORD;
 SrcFile,
 DestFile: THandle;
 FileCopier: TFileCopier): DWORD; stdcall;
begin
 FileCopier.SetPosition(TotalBytesTransferred);
end;

{ TFileCopier }

procedure TFileCopier.Copy;
 function FileSize (const AFileName: string): Int64;
 var
   FS: TFileStream;
 begin
   FS := TFileStream.Create(AFileName,fmOpenRead);
   try
     Result := FS.Size
   finally
     FS.Free;
   end;
 end;
begin
 if Assigned(FProgressBar) then
 begin
   FProgressBar.Position := 0;
   FProgressBar.Min := 0;
   FProgressBar.Max := FileSize (FSource)
 end;
 if not CopyFileEx(PChar(FSource),PChar(FDest),@CopyCallback,Self,PBOOL(False),0) then
   RaiseLastOSError;
end;

constructor TFileCopier.Create(const ASource, ADest: string);
begin
 FSource := ASource;
 FDest := ADest;
end;

procedure TFileCopier.SetPosition(APos: Int64);
begin
 if Assigned (FProgressBar) then
   FProgressBar.Position := APos
end;

procedure TFileCopier.SetProgressBar(const AProgressBar: TProgressBar);
begin
 FProgressBar := AProgressBar;
 if Assigned (FProgressBar) then
   FProgressBar.Position := 0;
end;

end.

Использование:


procedure TForm1.Button1Click(Sender: TObject);
var
 FileCopier: IFileCopier;
begin
 FileCopier := TFileCopier.Create("I:\pub\video\movies\First_films.avi","e:\temp\film.avi");
 FileCopier.ProgressBar := ProgressBar1;
 FileCopier.Copy;
end;


 
LiqS   (2005-08-28 23:07) [4]

спасибо


 
Lamer@fools.ua ©   (2005-08-29 08:42) [5]

>if not CopyFileEx(PChar(FSource),PChar(FDest),@CopyCallback,Self,PBOOL(False),0) then
  RaiseLastOSError;


Апшибочка. Тогда уж сразу nil написать. Либо передавать, всё-таки, указатель на переменную типа BOOL.



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

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

Наверх




Память: 0.47 MB
Время: 0.07 c
2-1128692295
Id
2005-10-07 17:38
2005.10.30
Fb


2-1128801558
Azeem
2005-10-08 23:59
2005.10.30
Псевдоним проекта


1-1128432113
Dell3r
2005-10-04 17:21
2005.10.30
Find in DBRichEdit


14-1128944536
Андрей Жук
2005-10-10 15:42
2005.10.30
Дурацкие детские книжки - это надо читать - обхохочитесь


2-1128514527
SergP.
2005-10-05 16:15
2005.10.30
StrToDateTime, формат даты