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

时间:2016-04-13 09:41:04

标签: shell winapi lazarus freepascal

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

以下是选择设备的代码:

r:=  ShlObj.SHBrowseForFolder(x);

但是,我所拥有的只是r,这是一个LPITEMIDLIST变量。

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

注意:我必须使用ShellApi / ShlObj接口进行复制

1 个答案:

答案 0 :(得分:2)

我假设PIDL指定了一个属于文件系统的项目,但我相信这是你想要的,因为你继续说“复制所有文件”。在这种情况下,调用SHGetPathFromIDList从PIDL获取文件系统路径,然后调用SHFileOperation复制文件。

如果要在shell级别执行复制,而不是限制为文件,那么它会更复杂一些。可能最简单的方法是使用IFileOperation,特别是CopyItemCopyItems方法。您需要能够从PIDL转到IShellItem,这可以通过SHCreateItemFromIDList完成。