复制文件时,如何显示进度条
2011-01-11 17:32
344 查看
procedure mycopyfile(sourcef,targetf:string;i:integer);
var
FromF,ToF:file;
NumRead,NumWritten:Integer;
Buf:array[1..2048] of Char;
n:integer;
begin
AssignFile(FromF,sourcef);
Reset(FromF, 1); { Record size = 1 }
AssignFile(ToF,targetf); { Open output file }
Rewrite(ToF, 1); { Record size = 1 }
n:=0;
repeat
BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
form1.ProgressBar1.Position:=sizeof(buf)*n*100 div FileSize(FromF)*i div 4;
application.ProcessMessages;
//显示进度
BlockWrite(ToF, Buf, NumRead, NumWritten);
inc(n);
until (NumRead = 0) or (NumWritten <> NumRead);
form1.ProgressBar1.Position:=100;
CloseFile(FromF);
CloseFile(ToF);
end;
====================================================================================
以下例子是关于delphi复制文件,加上进度条的方法的例子的关键代码:
procedure TForm1.Button1Click(Sender: TObject);
const
getPath = 'c:/temp/get.rar';
setPath = 'c:/temp/set.rar';
var
getStream,setStream: TFileStream;
num, n: Integer;
buf: PByte;
BufSize,block: Integer;
begin
if not FileExists(getPath) then
begin
ShowMessage('源文件不存在');
Exit;
end;
getStream := TFileStream.Create(getPath, fmOpenRead or fmShareExclusive);
setStream := TFileStream.Create(setPath, fmCreate);
num := getStream.Size;
setStream.Size := num;
getStream.Position := 0;
setStream.Position := 0;
BufSize := num;
block := BufSize div 100;
GetMem(buf, BufSize);
ProgressBar1.Max := 100;
ProgressBar1.Min := 0;
ProgressBar1.Position := 0;
while num <> 0 do
begin
Application.ProcessMessages;
n := block;
if n > num then n := num;
getStream.ReadBuffer(buf^, n);
setStream.WriteBuffer(buf^, n);
ProgressBar1.Position := Trunc((1 - num / BufSize) * 100);
Dec(num, n);
end;
FreeMem(buf, BufSize);
getStream.Free;
setStream.Free;
ShowMessage('复制完毕');
ProgressBar1.Position := 0;
end;
end.
var
FromF,ToF:file;
NumRead,NumWritten:Integer;
Buf:array[1..2048] of Char;
n:integer;
begin
AssignFile(FromF,sourcef);
Reset(FromF, 1); { Record size = 1 }
AssignFile(ToF,targetf); { Open output file }
Rewrite(ToF, 1); { Record size = 1 }
n:=0;
repeat
BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
form1.ProgressBar1.Position:=sizeof(buf)*n*100 div FileSize(FromF)*i div 4;
application.ProcessMessages;
//显示进度
BlockWrite(ToF, Buf, NumRead, NumWritten);
inc(n);
until (NumRead = 0) or (NumWritten <> NumRead);
form1.ProgressBar1.Position:=100;
CloseFile(FromF);
CloseFile(ToF);
end;
====================================================================================
以下例子是关于delphi复制文件,加上进度条的方法的例子的关键代码:
procedure TForm1.Button1Click(Sender: TObject);
const
getPath = 'c:/temp/get.rar';
setPath = 'c:/temp/set.rar';
var
getStream,setStream: TFileStream;
num, n: Integer;
buf: PByte;
BufSize,block: Integer;
begin
if not FileExists(getPath) then
begin
ShowMessage('源文件不存在');
Exit;
end;
getStream := TFileStream.Create(getPath, fmOpenRead or fmShareExclusive);
setStream := TFileStream.Create(setPath, fmCreate);
num := getStream.Size;
setStream.Size := num;
getStream.Position := 0;
setStream.Position := 0;
BufSize := num;
block := BufSize div 100;
GetMem(buf, BufSize);
ProgressBar1.Max := 100;
ProgressBar1.Min := 0;
ProgressBar1.Position := 0;
while num <> 0 do
begin
Application.ProcessMessages;
n := block;
if n > num then n := num;
getStream.ReadBuffer(buf^, n);
setStream.WriteBuffer(buf^, n);
ProgressBar1.Position := Trunc((1 - num / BufSize) * 100);
Dec(num, n);
end;
FreeMem(buf, BufSize);
getStream.Free;
setStream.Free;
ShowMessage('复制完毕');
ProgressBar1.Position := 0;
end;
end.
相关文章推荐
- 复制文件时,如何显示进度条(使用BlockRead函数读取数据,并插入application.ProcessMessages)
- 复制文件时,如何显示进度条(使用TFileStream一点一点读,或者使用BlockRead)
- C#如何调用Windows系统自身的文件复制功能,显示文件进度,显示重名提示
- 使用C#在进度条中显示复制文件的进度
- NSURLConnection下载文件时,如何显示进度
- 将c:\windows.复制到当前目录并显示进度的批处理文件
- 使用多线程实现文件的复制功能,并在控制台显示复制的进度,进度以百分比表示。
- android中如何下载文件并显示下载进度
- 使用C#在进度条中显示复制文件的进度
- IFileOperation实现复制文件时显示进度对话框
- c#根据文件大小显示文件复制进度条实例
- 使用C#在进度条中显示复制文件的进度
- [C#]实现文件复制[更新]实时显示进度条
- NSURLConnection下载文件时,如何显示进度
- wpf文件复制显示进度条效果(双线程)
- 使用C#在进度条中显示复制文件的进度
- 使用C#在进度条中显示复制文件的进度
- 使用C#在进度条中显示复制文件的进度
- 使用C#在进度条中显示复制文件的进度
- 修改dirty_bytes(脏位),使得linux的文件管理器nautilus复制文件的进度显示准确