【问题标题】:Moving the content of a folder to another one将文件夹的内容移动到另一个文件夹
【发布时间】:2015-08-28 01:34:38
【问题描述】:

使用 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,你是对的!问题是“FOF_FILESONLY”标志...请添加您的答案让我接受...谢谢!

标签: file delphi winapi move


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 2022-10-25
    • 1970-01-01
    • 2014-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多