将文件夹的内容移动到另一个文件夹中。

3

我需要使用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 标志即可... 你使用的是哪个 Windows 版本?返回了什么错误代码? - GabrielF
@GabrielF,你是对的!问题在于“FOF_FILESONLY”标志...请回答让我接受...谢谢! - Guybrush
1个回答

8

你应该使用第二个版本,不带有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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接