关于 目录 copy的简单问题(50分)

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

Laird

Unregistered / Unconfirmed
GUEST, unregistred user!
dir 1
.
./a a.txt
./b b.txt
dir 2
如何将dir1下的子目录连带文件copy 到 dir2 下
 
这有个例子:
function CopyDirectoryTree(AHandle:THandle;AFromDir,AToDir:String):boolean;
Var SHFileOpStruct:TSHFileOpStruct;
begin
with SHFileOpStruct do
begin
Wnd := AHandle;
wFunc := FO_COPY;
pFrom := PChar(AFromDir);
pTo := PChar(AToDir);
fFlags := FOF_NOCONFIRMATION or FOF_NOCONFIRMMKDIR or FOF_FILESONLY ;
fAnyOperationsAborted := True;
hNameMappings := nil;
lpszProgressTitle := nil;
end;
If ShFileOperation(SHFileOpStruct)= 0 then
Result:= True
else
Result:= false;
end;
 
有完整的吗/
我刚接触这个。有点看不懂
 
var SHFileOpStruct:TSHFileOpStruct;
user 里面要加东西吗?
wnd 这些要申明在哪里?
 
uses
ShellAPI;
procedure TForm1.Button1Click(Sender: TObject);
var
fos: TSHFileOpStruct;
begin
fos.Wnd := Handle;
fos.wFunc := FO_COPY;
fos.pFrom := 'c:/dir1/*.*';
fos.pTo := 'c:/dir2';
SHFileOperation(fos);
end;
 
原来是删除dirto 文件夹,的只要少加改动就可实现你的功能。
function DelFullDir(Const todir,DirTo : TFileName):boolean;
var
ppldk: TWin32FindData;
hfile:Thandle;
ss : string;
begin
//dirtodel = '···/';
result:=false;
try
hfile:=findfirstfile(Pchar(DirToDel+'*.*'),ppldk);
repeat
if (hfile <> INVALID_HANDLE_VALUE)
and ((strcomp(ppldk.cFileName,'.')<>0) and (strcomp(ppldk.cFileName,'..')<>0)) then
begin
ss:=DirToDel;
ss:=ss+ppldk.cFileName;
SetFileAttributes(pchar(ss),FILE_ATTRIBUTE_NORMAL);
movefile(ss,todir+ss);//原来是:deletefile(ss);
end;
until not findnextfile(hfile,ppldk);
if (hfile <> INVALID_HANDLE_VALUE) then
windows.findclose(hfile);
result:=true;
// if RemoveDirectory(pchar(DirToDel)) then
//result:=true;
except
result:=false;
end;
end;
 
>有完整的吗/
是完整的,我在程序里就用它。
〉var SHFileOpStruct:TSHFileOpStruct;
〉user 里面要加东西吗?
uses shellapi
wnd 这些要申明在哪里?
请看pascal 中的with 的语法。

 
wnd 是结构 TSHFileOpStruct 的元素。
with SHFileOpStruct do
Wnd := AHandle;
等于 SHFileOpStruct.Wnd := AHandle;
我代码中 fos.Wnd := Handle;
的 Handle 是 Form1.Handle 是弹出 Windows Shell
中的文件COPY对话框的父窗口句柄。
 
后退
顶部