我正在使用FreePascal / Lazarus,我正在尝试找到正确的ShlObj / ShellApi调用,将所有文件从Device的DCIM文件夹(即相机)复制到文件系统上的另一个文件夹。
以下是选择设备的代码:
r:= ShlObj.SHBrowseForFolder(x);
但是,我所拥有的只是r,这是一个LPITEMIDLIST
变量。
有没有人知道将设备的DCIM文件夹'r'中的所有文件复制到目标文件夹(即strDest)的正确代码?
注意:我必须使用ShellApi / ShlObj接口进行复制
答案 0 :(得分:2)
我假设PIDL指定了一个属于文件系统的项目,但我相信这是你想要的,因为你继续说“复制所有文件”。在这种情况下,调用SHGetPathFromIDList
从PIDL获取文件系统路径,然后调用SHFileOperation
复制文件。
如果要在shell级别执行复制,而不是限制为文件,那么它会更复杂一些。可能最简单的方法是使用IFileOperation
,特别是CopyItem
和CopyItems
方法。您需要能够从PIDL转到IShellItem
,这可以通过SHCreateItemFromIDList
完成。