关于文件复制时,复制到的文件正在使用时,会跳出错误的问题!
真是要命了,用ShellAPI复制文件好是好,但我不知道怎么样把文件复制的进度和我自己窗体上的ProgressBar关联起来,自己写了个用FileStream拷贝函数,代码如下,但碰到 文件正在被使用时,会跳出错误,不知道该如何解决,请大家帮忙!
function TMainForm.StreamCopy(FromFile, ToFile: String): Boolean;
var
FromStr, ToStr: TFileStream;
PackSize, CurrentSize: Integer;
Create, LastAccess, LastWrite: TFileTime;
begin
PackSize := 4096;//我这里直接定义了复制时的大小,不知道这样行不行?
FromStr := TFileStream.Create(FromFile, fmOpenRead);
ProgressBar1.Max := FromStr.Size div PackSize;
try
ToStr := TFileStream.Create(ToFile, fmCreate);//如果复制到的文件正在使用的话,这里创建就会除错,而且过程停止,我想如果出错的话,能不能直接跳过?
try
CurrentSize := 0;
repeat
if FromStr.Size - CurrentSize <= PackSize then
PackSize := FromStr.Size - CurrentSize;
ToStr.CopyFrom(FromStr, PackSize);
Inc(CurrentSize, PackSize);
ProgressBar1.Position := ProgressBar1.Position + 1;
until CurrentSize >= FromStr.Size;
GetFileTime(FromStr.Handle, @Create, @LastAccess, @LastWrite);
SetFileTime(ToStr.Handle, @Create, @LastAccess, @LastWrite);
ProgressBar1.Position := 0;
finally
ToStr.Free;
end
finally
FromStr.Free;
end;
Result := true;
end;