如何显示复制文件的进度

wwwrain 2003-12-28 08:26:35
如何显示正在复制文件的进度
例如在ProgressBar1上显示
...全文
109 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouhaijun2 2004-02-12
  • 打赏
  • 举报
回复
用复制文件流的方法
boytomato 2004-02-12
  • 打赏
  • 举报
回复
typedef struct _SHFILEOPSTRUCT { // shfos
HWND hwnd; //句柄
UINT wFunc; //
LPCSTR pFrom;
LPCSTR pTo;
FILEOP_FLAGS fFlags;
BOOL fAnyOperationsAborted;
LPVOID hNameMappings;
LPCSTR lpszProgressTitle; //是否显示进度!
} SHFILEOPSTRUCT, FAR *LPSHFILEOPSTRUCT;












unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls,shellAPI,filectrl;

type
TForm1 = class(TForm)
Panel1: TPanel;
StaticText1: TStaticText;
StaticText2: TStaticText;
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
Dir: string;
begin
Dir := 'D:';
if SelectDirectory(Dir, [sdAllowCreate, sdPerformCreate, sdPrompt],0) then
//函数执行成功
// sdAllowCreate:允许创建目录
// sdPerformCreate:执行创建目录
// sdPrompt:显示提示信息
edit1.text:= Dir;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
Dir: string;
begin
Dir := 'D:';
if SelectDirectory(Dir, [sdAllowCreate, sdPerformCreate, sdPrompt],0) then
//解释同上
edit2.text:= Dir;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
OpStruc:TSHFileOpStruct;
FromBuf,ToBuf:Array[0..128] of Char;
begin
FillChar(FromBuf,Sizeof(FromBuf),0);
FillChar(ToBuf,Sizeof(ToBuf),0);
//用0初始化FromBuf和ToBuf数组
StrPCopy(FromBuf,Pchar(Edit1.Text));
StrPCopy(ToBuf,Pchar(Edit2.Text));
//分别在 FromBuf和ToBuf数组中填入操作的源目录及目标目录
//开始填充OpStruc记录
with OpStruc do
begin
Wnd:=Handle;
wFunc:=FO_COPY;
//复制操作
pFrom:=@FromBuf;
pTo:=@ToBuf;
fFlags:=FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION;
fAnyOperationsAborted:=False;
hNameMappings:=nil;
lpszProgressTitle:=nil;
end;
if SHFileOperation(OpStruc)=0 then
//函数执行成功
MessageBox(Handle,'复制完毕。','复制信息',MB_OK+MB_ICONINFORMATION);
end;

procedure TForm1.Button4Click(Sender: TObject);
var
OpStruc:TSHFileOpStruct;
FromBuf,ToBuf:Array[0..128] of Char;
begin
FillChar(FromBuf,Sizeof(FromBuf),0);
FillChar(ToBuf,Sizeof(ToBuf),0);
StrPCopy(FromBuf,Pchar(Edit1.Text));
StrPCopy(ToBuf,Pchar(Edit2.Text));
//开始填充OpStruc记录
with OpStruc do
begin
Wnd:=Handle;
wFunc:=FO_MOVE;
//移动操作
pFrom:=@FromBuf;
pTo:=@ToBuf;
fFlags:=FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION;
fAnyOperationsAborted:=False;
hNameMappings:=nil;
lpszProgressTitle:='正在文件';
end;
if SHFileOperation(OpStruc)=0 then
//执行成功
MessageBox(Handle,'移动完毕。','移动信息',MB_OK+MB_ICONINFORMATION);
end;

procedure TForm1.Button5Click(Sender: TObject);
var
OpStruc:TSHFileOpStruct;
FromBuf:Array[0..128] of Char;
begin
FillChar(FromBuf,Sizeof(FromBuf),0);
StrPCopy(FromBuf,Pchar(Edit1.Text));
//开始填充OpStruc记录
with OpStruc do
begin
Wnd:=Handle;
wFunc:=FO_DELETE;
pFrom:=@FromBuf;
pTo:=nil;
fFlags:=FOF_NOCONFIRMATION;
lpszProgressTitle:='正在删除';
end;
if SHFileOperation(OpStruc)=0 then
//执行成功
MessageBox(Handle,'删除完毕。','删除信息',MB_OK+MB_ICONINFORMATION);
end;

end.


boytomato 2004-02-12
  • 打赏
  • 举报
回复
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Panel1: TPanel;
StaticText1: TStaticText;
StaticText2: TStaticText;
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
Dir: string;
begin
Dir := 'D:';
if SelectDirectory(Dir, [sdAllowCreate, sdPerformCreate, sdPrompt],0) then
//函数执行成功
// sdAllowCreate:允许创建目录
// sdPerformCreate:执行创建目录
// sdPrompt:显示提示信息
edit1.text:= Dir;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
Dir: string;
begin
Dir := 'D:';
if SelectDirectory(Dir, [sdAllowCreate, sdPerformCreate, sdPrompt],0) then
//解释同上
edit2.text:= Dir;
end;

end.
Sorder 2004-02-12
  • 打赏
  • 举报
回复
我做过一个 (只能记得大致意思)
var
copyfromfile,copytofile:file
fromfilesize,copyedsize:integer;
buff:array[0.1024] of char;
begin
assignfile(copyfromfile,'c:\f.txt');
reset(copyfromfile);
assignfile(copytofile,'d:\f.txt');
rewrite(copytofile);
fromfilesize=filesize(copyfromfile);
copyedsize=0;
while not eof(copyfromfile) do
begin
blockread(copyfromfile,buff);
blockwrite(copytofile,buff);
end;
end;
crossbow 2004-02-12
  • 打赏
  • 举报
回复
蒋晟老大这些时经常来哦...
wwwrain 2004-02-12
  • 打赏
  • 举报
回复
up
chvin 2004-01-03
  • 打赏
  • 举报
回复
学习...
hyj122 2004-01-03
  • 打赏
  • 举报
回复
up
huangrenguang 2004-01-03
  • 打赏
  • 举报
回复
路过。
wwwrain 2004-01-03
  • 打赏
  • 举报
回复
up
太空11 2004-01-01
  • 打赏
  • 举报
回复
up
WWWWA 2003-12-31
  • 打赏
  • 举报
回复
uses ShellAPI
var
p:_shfileopstruct;
a:integer;
begin
p.Wnd:=handle;
p.wFunc:=fo_copy
p.pFrom:='f:\test'#0#0; //copyf盘的test文件夹
p.pTo:=nil;
p.fFlags:=fof_noconfirmation or fof_simpleprogress
p.fAnyOperationsAborted:=true;
a:=shfileoperation(p);
end;
wwwrain 2003-12-31
  • 打赏
  • 举报
回复
楼上,请写简单易懂些,阿拉水品不高,英文不行,麻烦你了。
蒋晟 2003-12-31
  • 打赏
  • 举报
回复
http://oldlook.experts-exchange.com/Programming/Programming_Languages/Delphi/Q_20788085.html
yurenjf 2003-12-31
  • 打赏
  • 举报
回复
楼上的大侠:
怎么用啊
outer2000 2003-12-28
  • 打赏
  • 举报
回复
like the windows copy file dialogs..use this api;
Performs a copy, move, rename, or delete operation on a file system object.

WINSHELLAPI int WINAPI SHFileOperation(

LPSHFILEOPSTRUCT lpFileOp
);


Parameters

lpFileOp

Pointer to an SHFILEOPSTRUCT structure that contains information the function needs to carry out the operation.



Return Values

Returns zero if successful or nonzero if an error occurs.

See Also

SHFILEOPSTRUCT
VeryOldMan 2003-12-28
  • 打赏
  • 举报
回复
用以流式文件打开所要复制得文件,获得其大小,复制时,按实际已复制/文件大小显示进度。
ttllhh 2003-12-28
  • 打赏
  • 举报
回复
学习

5,391

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧