如何拷贝一类文件(50分)

  • 主题发起人 主题发起人 liuql188
  • 开始时间 开始时间
L

liuql188

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在程序中实现象dos命令:copy ;c:/windows/am*.* d:/kk
 
用Filelistbox的mask;
然后用循环
 
我觉得用winexec执行dos命令的方式可能更直接更简单,可不知道怎么写?
我用winexec('cmd /c copy c:/windows/am*.* d:/kk');
但执行不出错,但没有拷贝结果。
 
我觉用KKYY老兄的方法是比较实际,用winexec虽然简单容易理解,可是……
 
findfirst,findnext 结合Copyfile ,复杂点但灵活.
 
小心哦。 cmd copy ;的方法不支持长文件名格式的目录和文件名
想自己做的话. 用 findfirst ,findnext , WINAPI中的COPYFILE
还可以用 ShellApi中的拷贝文件的方法.
 
用shfileoperation函数最好,什么copy,delete,cut全部搞定
 
> winexec('cmd /c copy c:/windows/am*.* d:/kk');
本来是可以的,可是你的 d:/kk 存在吗?copy的目的路径是必须存在的
如果不存在,那么需要先建立
另外win2000/nt才是用 cmd ,win9x要用command
nt/2000的 cmd 是支持长文件名的,但是如果有空格,那么必须用双引号包围起来
比如,
copy abcdefgh000000000000000000000000 c:/ ; ; 是合法的
copy "abcdefgh000000000000000000000000" c:/ ; ; 是合法的
copy "abcdefgh000000000000000000000000" "c:/" ; ; 是合法的
copy "c:/program files/abc/ab*" "c:/" ; ; 是合法的
但是 copy c:/program files/abc/ab* c:/ 则不行(program files有空格,需要使用双引号)
 
var
; p:_shfileopstruct;
; a:integer;
begin
p.Wnd:=handle;
p.wFunc:=FO_COPY;
p.pFrom:='f:/*.exe';
p.pTo:='e:/';
p.fFlags:=fof_noconfirmation;
p.fAnyOperationsAborted:=true;
a:=shfileoperation(p);
end;
 
> winexec('cmd /c copy c:/windows/am*.* d:/kk');
别的程序做的事,你放心的下么?
>findfirst,findnext 结合Copyfile ,复杂点但灵活.
做一个目录的话,不用那么麻烦吧?
>用shfileoperation函数最好,什么copy,delete,cut全部搞定
功能强大,且可显示系统的操作对话框,共享软件首选,但我讨厌记那些参数。

一个目录操作,我一般用用Filelistbox的mask;然后用循环。
包括子目录,我一般先用findfirst,findnext,取得目录列表,结合Filelistbox的mask;然后用循环。
 
firstlove的要改一点小地方:
p.pFrom:='f:/*.exe'#0#0;
p.pTo:='e:/'#0#0;
注意即使只有1个文件名字,也要用2个0结束
 
同意王寒松的,这种方法我认为最好了。

如果不用API复制可以自己用流复制,进度自己最清楚了。
 
我是一个爱偷懒的人,所以用了kkyy的方法。
 
多人接受答案了。
 
后退
顶部