delphi 文件复制

来源:百度知道 编辑:UC知道 时间:2024/05/29 02:03:43
我从网上得到了这些代码!可有些代码不知道是什么意思! 请高手帮小弟解释下,谢谢~~
Var
buf: PByte;
S, T: TFileStream;
num,bsize,n,block:integer;
Begin
S := TFileStream.Create(form1.edit1.Text, fmOpenRead );
T := TFileStream.Create(form1.edit2.Text,fmOpenWrite or fmCreate );
try
num:=s.Size;
t.Size:=num;

BSize := num;
block := BSize div 100; //解释
GetMem(buf, BSize); //解释

form1.ProgressBar1.Max := 100;
form1.ProgressBar1.Min := 0;

while num <> 0 do
begin
Application.ProcessMessages; //解释
n := block;
if n > num then n := num;
s.ReadBuffer(buf^, n); //解释
t.WriteBuffer(buf^, n); //解释
form1.ProgressBar1.Position := Trunc((1 - num / BSize) * 100);//解释
Dec(num, n); //解释
最后那句代码不用!

看来是一个复制大型文件用的代码。
Var
buf: PByte;
S, T: TFileStream;
num,bsize,n,block:integer;
Begin
S := TFileStream.Create(form1.edit1.Text, fmOpenRead );//源文件
T := TFileStream.Create(form1.edit2.Text,fmOpenWrite or fmCreate );//目标文件
try
num:=s.Size;//源文件的大小
t.Size:=num;//设置目标文件的大小跟源文件一样大

BSize := num;//缓冲区内存的大小
block := BSize div 100; //把源文件分割成100份,block是一份的大小
GetMem(buf, BSize); //在堆栈中划出一个BSize大小的空白内存

form1.ProgressBar1.Max := 100;
form1.ProgressBar1.Min := 0;

while num <> 0 do
begin
Application.ProcessMessages; //在复制的过程中,程序还能继续响应其他操作而不锁死
n := block;
if n > num then n := num;
s.ReadBuffer(buf^, n); //从源文件复制大小为n的数据到内存
t.WriteBuffer(buf^, n); //从内存中把大小为n的数据复制到目标文件
form1.ProgressBar1.Position := Trunc((1 - num / BSize) * 100);//进度条相应的增加到已经复制的文件数据量
Dec(num,