将文件夹的内容移动到另一个文件夹
Moving the content of a folder to another one
使用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;
但是当使用这个功能时,整个文件夹都会被移动到目的地,而不仅仅是它的内容。例如,如果我使用 MoveDir('c:\test', 'd:\test') 我得到 d:\teste\teste.
我已经尝试更改下面的这一行,它在处理文件 (FO_COPY) 时有效,但在移动时无效。
pFrom := PChar(SrcDir + '\*.*' + #0);
拜托,有人可以帮我解决这个问题吗?如果我可以在不逐个文件、逐个文件夹地移动的情况下执行此操作,那就太好了...
谢谢!!
您应该使用没有 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;
使用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;
但是当使用这个功能时,整个文件夹都会被移动到目的地,而不仅仅是它的内容。例如,如果我使用 MoveDir('c:\test', 'd:\test') 我得到 d:\teste\teste.
我已经尝试更改下面的这一行,它在处理文件 (FO_COPY) 时有效,但在移动时无效。
pFrom := PChar(SrcDir + '\*.*' + #0);
拜托,有人可以帮我解决这个问题吗?如果我可以在不逐个文件、逐个文件夹地移动的情况下执行此操作,那就太好了...
谢谢!!
您应该使用没有 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;