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

时间:2015-08-27 15:12:30

标签: file delphi winapi 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;

但是当使用此功能时,整个文件夹将移动到目标,而不仅仅是内容。例如,如果我使用MoveDir(' c:\ test',' d:\ test'),我会得到d:\ teste \ teste。

我已经尝试更改此行,并且在处理文件(FO_COPY)时有效但在移动时无效。

pFrom  := PChar(SrcDir + '\*.*' + #0);

拜托,有人可以帮我吗?如果我可以在没有逐个文件夹的情况下逐个文件移动的情况下执行此操作会很棒...

谢谢!

1 个答案:

答案 0 :(得分:6)

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