delphi 文件流复制有关问题,诡异!求解
delphi 文件流复制问题,诡异!求解!
[code=Delphi(Pascal)][/code]
//前面代码为遍历文件夹下所有文件'ts1+DCIM\100DSCIM\ ts1 为移动盘符
for sf1 := 2 to sf -1 do
begin
try
memo1.Lines.Add('尝试复制:'+ts1 +'DCIM\100DSCIM\' + sfile[sf1]);
getpath := ts1 +'DCIM\100DSCIM\' + sfile[sf1];
setpath := ss + '\' + sfile[sf1];
getStream := TFileStream.Create(getPath, fmOpenRead or fmShareExclusive);
setStream := TFileStream.Create(setPath, fmCreate);
memo1.Lines.Add('尝试:'+ts1 +'DCIM\100DSCIM\' + sfile[sf1]+'读入缓存');
nnum := getStream.Size;
setStream.Size := nnum;
getStream.Position := 0;
setStream.Position := 0;
BufSize := nnum;
block := BufSize div 100;
GetMem(buf, BufSize);
//ProgressBar1.Max := 100;
//ProgressBar1.Min := 0;
//ProgressBar1.Position := 0;
while nnum <> 0 do
begin
Application.ProcessMessages;
n := block;
if n > nnum then n := nnum;
getStream.ReadBuffer(buf^, n);
setStream.WriteBuffer(buf^, n);
if num = 1 then
ProgressBar1.Position := Trunc((1 - nnum / BufSize) * 100);
if num = 2 then
ProgressBar2.Position := Trunc((1 - nnum / BufSize) * 100);
if num = 3 then
ProgressBar3.Position := Trunc((1 - nnum / BufSize) * 100);
if num = 4 then
ProgressBar4.Position := Trunc((1 - nnum / BufSize) * 100);
if num = 5 then
ProgressBar5.Position := Trunc((1 - nnum / BufSize) * 100);
if num = 6 then
ProgressBar6.Position := Trunc((1 - nnum / BufSize) * 100);
if num = 7 then
ProgressBar7.Position := Trunc((1 - nnum / BufSize) * 100);
if num = 8 then
ProgressBar8.Position := Trunc((1 - nnum / BufSize) * 100);
if num = 9 then
ProgressBar9.Position := Trunc((1 - nnum / BufSize) * 100);
if num = 10 then
ProgressBar10.Position := Trunc((1 - nnum / BufSize) * 100);
if num = 11 then
ProgressBar11.Position := Trunc((1 - nnum / BufSize) * 100);
if num = 12 then
ProgressBar12.Position := Trunc((1 - nnum / BufSize) * 100);
if num = 13 then
ProgressBar13.Position := Trunc((1 - nnum / BufSize) * 100);
if num = 14 then
ProgressBar14.Position := Trunc((1 - nnum / BufSize) * 100);
if num = 15 then
ProgressBar15.Position := Trunc((1 - nnum / BufSize) * 100);
if num = 16 then
ProgressBar16.Position := Trunc((1 - nnum / BufSize) * 100);
Dec(nnum, n);
end;
result := 0;
FreeMem(buf, BufSize);
getStream.Free;
setStream.Free;
ProgressBar1.Position := 0;
ProgressBar2.Position := 0;
ProgressBar3.Position := 0;
ProgressBar4.Position := 0;
ProgressBar5.Position := 0;
ProgressBar6.Position := 0;
ProgressBar7.Position := 0;
ProgressBar8.Position := 0;
ProgressBar9.Position := 0;
ProgressBar10.Position := 0;
ProgressBar11.Position := 0;
ProgressBar12.Position := 0;
ProgressBar13.Position := 0;
ProgressBar14.Position := 0;
ProgressBar15.Position := 0;
ProgressBar16.Position := 0;
except
memo1.Lines.Add('开始删除'+ss);
//listbox1.Items.Add(datetimeTostr(NOW)+'第'+intTostr(num)+'端口:'+'->'+k2+'->'+k1+sfile[sf1]+'文件损坏,请检修!!!');
FillChar(T1, SizeOf(T1), 0);
//listbox1.Items.Add(datetimeTostr(NOW)+'第'+intTostr(num)+'端口:'+'->'+k2+'->'+k1+sfile[sf1]+'文件损坏,请检修!!!');
//showmessage(sfile[sf1]+'文件损坏');
[code=Delphi(Pascal)][/code]
//前面代码为遍历文件夹下所有文件'ts1+DCIM\100DSCIM\ ts1 为移动盘符
for sf1 := 2 to sf -1 do
begin
try
memo1.Lines.Add('尝试复制:'+ts1 +'DCIM\100DSCIM\' + sfile[sf1]);
getpath := ts1 +'DCIM\100DSCIM\' + sfile[sf1];
setpath := ss + '\' + sfile[sf1];
getStream := TFileStream.Create(getPath, fmOpenRead or fmShareExclusive);
setStream := TFileStream.Create(setPath, fmCreate);
memo1.Lines.Add('尝试:'+ts1 +'DCIM\100DSCIM\' + sfile[sf1]+'读入缓存');
nnum := getStream.Size;
setStream.Size := nnum;
getStream.Position := 0;
setStream.Position := 0;
BufSize := nnum;
block := BufSize div 100;
GetMem(buf, BufSize);
//ProgressBar1.Max := 100;
//ProgressBar1.Min := 0;
//ProgressBar1.Position := 0;
while nnum <> 0 do
begin
Application.ProcessMessages;
n := block;
if n > nnum then n := nnum;
getStream.ReadBuffer(buf^, n);
setStream.WriteBuffer(buf^, n);
if num = 1 then
ProgressBar1.Position := Trunc((1 - nnum / BufSize) * 100);
if num = 2 then
ProgressBar2.Position := Trunc((1 - nnum / BufSize) * 100);
if num = 3 then
ProgressBar3.Position := Trunc((1 - nnum / BufSize) * 100);
if num = 4 then
ProgressBar4.Position := Trunc((1 - nnum / BufSize) * 100);
if num = 5 then
ProgressBar5.Position := Trunc((1 - nnum / BufSize) * 100);
if num = 6 then
ProgressBar6.Position := Trunc((1 - nnum / BufSize) * 100);
if num = 7 then
ProgressBar7.Position := Trunc((1 - nnum / BufSize) * 100);
if num = 8 then
ProgressBar8.Position := Trunc((1 - nnum / BufSize) * 100);
if num = 9 then
ProgressBar9.Position := Trunc((1 - nnum / BufSize) * 100);
if num = 10 then
ProgressBar10.Position := Trunc((1 - nnum / BufSize) * 100);
if num = 11 then
ProgressBar11.Position := Trunc((1 - nnum / BufSize) * 100);
if num = 12 then
ProgressBar12.Position := Trunc((1 - nnum / BufSize) * 100);
if num = 13 then
ProgressBar13.Position := Trunc((1 - nnum / BufSize) * 100);
if num = 14 then
ProgressBar14.Position := Trunc((1 - nnum / BufSize) * 100);
if num = 15 then
ProgressBar15.Position := Trunc((1 - nnum / BufSize) * 100);
if num = 16 then
ProgressBar16.Position := Trunc((1 - nnum / BufSize) * 100);
Dec(nnum, n);
end;
result := 0;
FreeMem(buf, BufSize);
getStream.Free;
setStream.Free;
ProgressBar1.Position := 0;
ProgressBar2.Position := 0;
ProgressBar3.Position := 0;
ProgressBar4.Position := 0;
ProgressBar5.Position := 0;
ProgressBar6.Position := 0;
ProgressBar7.Position := 0;
ProgressBar8.Position := 0;
ProgressBar9.Position := 0;
ProgressBar10.Position := 0;
ProgressBar11.Position := 0;
ProgressBar12.Position := 0;
ProgressBar13.Position := 0;
ProgressBar14.Position := 0;
ProgressBar15.Position := 0;
ProgressBar16.Position := 0;
except
memo1.Lines.Add('开始删除'+ss);
//listbox1.Items.Add(datetimeTostr(NOW)+'第'+intTostr(num)+'端口:'+'->'+k2+'->'+k1+sfile[sf1]+'文件损坏,请检修!!!');
FillChar(T1, SizeOf(T1), 0);
//listbox1.Items.Add(datetimeTostr(NOW)+'第'+intTostr(num)+'端口:'+'->'+k2+'->'+k1+sfile[sf1]+'文件损坏,请检修!!!');
//showmessage(sfile[sf1]+'文件损坏');