Guy*_*ush 3 delphi winapi file move
使用Delphi 7,我需要将所有内容(文件,文件夹和子文件夹)从一个文件夹移动到另一个文件夹.经过一些研究,SHFileOpStruct似乎是最好的选择.这是我到目前为止所得到的:
function MoveDir(SrcDir, DstDir: string): Boolean;
var
FOS: TSHFileOpStruct;
begin
ZeroMemory(@FOS, SizeOf(FOS));
with FOS do
begin
wFunc := FO_MOVE; // FO_COPY;
fFlags := FOF_FILESONLY or
FOF_ALLOWUNDO or FOF_SIMPLEPROGRESS;
pFrom := PChar(SrcDir + #0);
pTo := PChar(DstDir + #0);
end;
Result := (SHFileOperation(FOS) = 0);
end;
Run Code Online (Sandbox Code Playgroud)
但是当使用此功能时,整个文件夹将移动到目标,而不仅仅是内容.例如,如果我使用MoveDir('c:\ test','d:\ test'),我会得到d:\ teste\teste.
我已经尝试改变这条线了,它在处理文件(FO_COPY)时起作用,但在移动时不起作用.
pFrom := PChar(SrcDir + '\*.*' + #0);
Run Code Online (Sandbox Code Playgroud)
拜托,有人可以帮我吗?如果我能在不逐个文件夹的情况下移动文件夹,那就太棒了...
谢谢!!
你应该使用你的第二个版本,没有FOF_FILESONLY标志:
function MoveDir(SrcDir, DstDir: string): Boolean;
var
FOS: TSHFileOpStruct;
begin
ZeroMemory(@FOS, SizeOf(FOS));
with FOS do
begin
wFunc := FO_MOVE; // FO_COPY;
fFlags := FOF_ALLOWUNDO or FOF_SIMPLEPROGRESS;
pFrom := PChar(IncludeTrailingPathDelimiter(SrcDir) + '*.*'#0);
pTo := PChar(DstDir + #0);
end;
Result := (SHFileOperation(FOS) = 0);
end;
Run Code Online (Sandbox Code Playgroud)