我想一次性把多个文件拷贝到多个文件夹,请问怎么实现。
比如文件1、文件2拷贝到目录1,文件3、文件4拷贝到目录2,我想一次性实现。就是只显示一次进度条提示框,请问该怎么解决。
我现在只想到调用两次SHFileOperation的方法,即一次将文件1、文件2拷贝到目录1,一次将文件3、文件4拷贝到目录2。请问能不能只调用一次实现。
比如文件1、文件2拷贝到目录1,文件3、文件4拷贝到目录2,我想一次性实现。就是只显示一次进度条提示框,请问该怎么解决。
我现在只想到调用两次SHFileOperation的方法,即一次将文件1、文件2拷贝到目录1,一次将文件3、文件4拷贝到目录2。请问能不能只调用一次实现。
用批处理文件来实现.
方法其实很简单
pForm:文件1+#0+文件2+#0+文件3+#0+文件4+#0+#0(文件名带路径)
pTo:目录1+文件1+#0+目录1+文件2+#0+目录2+文件3+#0+目录2+文件4+#0+#0(文件名不带路径)。
后面灌水的都有分,呵呵,虽然分不多。
刚才查了帮助,可以一次性操作多个文件.
fFLAGS要包含FOF_MULTIDESTFILES标志.
var
f:TSearchRec;
na,sdir:string;
s:tstringlist;
i:integer;
fshell:TSHFileOpStruct;
begin
s:=tstringlist.Create;
//////////////////////
if (not DirectoryExists(dir2)) then CreateDir(dir2);
sdir:=dir1;
delete(sdir,length(sdir)-2,3);
if FindFirst(dir1,faAnyFile,f)=0 then
begin
if (f.Name<>'database.dat') and (f.Attr<>faDirectory) then
begin s.Add(f.Name) end;
repeat
na:=f.Name;
FindNext(f);
if (na<>f.Name) and (f.Name<>'database.dat') and (f.Attr<>faDirectory) then
begin s.Add(f.Name); end;
until na=f.Name;
end;
//////////////////////
fshell.Wnd:=form1.Handle;
fshell.wFunc:=FO_COPY;
fshell.fFlags:=FOF_SILENT;
for i:=0 to s.Count-1 do
begin
fshell.pFrom:=pansichar(sdir+s.Strings[i]);
fshell.pTo:=pansichar(dir2+s.strings[i]);
SHFileOperation(fshell);
end;
end;