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
.
我正在使用 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
.