【问题标题】:Shell API to copy all files in a folder?Shell API复制文件夹中的所有文件?
【发布时间】:2016-08-04 07:36:45
【问题描述】:

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

这里是选择设备的代码:

r:=  ShlObj.SHBrowseForFolder(x);

但是,我只有 r,它是一个 LPITEMIDLIST 变量。

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

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

【问题讨论】:

    标签: shell winapi lazarus freepascal


    【解决方案1】:

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

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

    【讨论】:

    • 抱歉,我打算在数码相机等设备上复制文件。有没有办法做到这一点?
    • 请你解决这个问题以明确你真正想要什么。
    • 无论如何,我添加了一些文本。您对 shell 编程以及使用的接口、PIDL 等有任何了解吗?
    • 我认为您需要非常缓慢地积累知识。这需要一点时间来适应。
    • 是的,这是我的 Delphi 代码:function SHCreateItemFromIDList(pidl: PItemIDList; const riid: TIID; out pv): HRESULT; stdcall; external 'shell32.dll';
    猜你喜欢
    • 2018-10-05
    • 1970-01-01
    • 2015-01-20
    • 1970-01-01
    • 2020-03-08
    • 2019-02-15
    • 2019-11-03
    • 2012-10-03
    • 2019-11-04
    相关资源
    最近更新 更多