2016-04-13 38 views
1

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

下面是代码选择选择该设备:

r:= ShlObj.SHBrowseForFolder(x); 

但从,那里所有我为r,它是一种可变LPITEMIDLIST

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

注:我必须使用ShellAPI的/ ShlObj界面做复制

回答

2

我假设PIDL规定是文件系统的一部分的项目,但我相信这是你想要什么,因为你去说“复制所有文件”。在这种情况下,请拨打SHGetPathFromIDList从PIDL获取文件系统路径,然后调用SHFileOperation复制文件。

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

+0

对不起,我打算将文件复制到设备上,例如数码相机。有没有办法做到这一点? – user1924308

+0

请你可以解决这个问题,以清楚你想要什么。 –

+0

是的,我的错误 – user1924308

相关问题