Shell API 复制文件夹中的所有文件?

Shell API to copy all files in a folder?

我正在使用 FreePascal/Lazarus,我正在尝试找到正确的 ShlObj/ShellApi 调用以将所有文件从设备的 DCIM 文件夹(即相机)复制到文件系统上的另一个文件夹。

这是 select 到 select 设备的代码:

r:=  ShlObj.SHBrowseForFolder(x);

但是从那里开始,我只有 r,它是一个 LPITEMIDLIST 变量。

有谁知道将设备的 DCIM 文件夹 'r' 中的所有文件复制到目标文件夹(即 strDest)的正确代码?

注意:我必须使用ShellApi/ShlObj界面来进行复制

我假设 PIDL 指定的项目是文件系统的一部分,但我相信这是您想要的,因为您继续说 "copy all files"。在这种情况下,调用 SHGetPathFromIDList to obtain the file system path from the PIDL, and then call SHFileOperation 复制文件。

如果要在shell级别执行复制,而不是局限于文件,那就稍微复杂一些。可能最简单的是使用 IFileOperation, specifically the CopyItem and CopyItems methods. You'll need to be able to go from a PIDL to an IShellItem which can be done with SHCreateItemFromIDList.