file - 将一个文件夹的内容 move 到另一个文件夹

标签 file delphi winapi move

使用 Delphi 7,我需要将所有内容(文件、文件夹和子文件夹)从一个文件夹 move 到另一个文件夹。经过一番研究,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;

但是使用此功能时,整个文件夹都会被 move 到目标位置,而不仅仅是其内容。例如,如果我使用 MoveDir('c:\test', 'd:\test') 我会得到 d:\teste\teste。

我已经尝试更改下面的这一行,它在复制文件(FO_COPY)时有效,但在 move 时无效。

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

请问有人可以帮我解决这个问题吗?如果我可以在不逐个文件、逐个文件夹 move 文件的情况下完成此操作,那就太好了...

谢谢!!

最佳答案

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

关于file - 将一个文件夹的内容 move 到另一个文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32253185/

相关文章:

在 C 中动态创建文件名

Delphi - 查找 Active Directory 用户的主要电子邮件地址

c - 使用 C 从 Windows 注册表读取

c++ - 控制台应用程序的 WIN API 计时器

c - GetThemeStream 用法

javascript - csv 文件的 d3 检索在 javascript 控制台中返回 Nan

c - 每行打印 60 个字符

java - 在java中创建一个受密码保护的文件

delphi - Delphi 中重载记录的隐式转换作为 const 数组中的参数

delphi - Delphi 6 中绑定(bind)到数据库的多选列表框