我正在尝试从网络流复制文件到本地磁盘(使用C#)。我想使用IFileOperation接口来获得现代复制UI,但我不知道如何为尚不存在的文件获得IShellItem。目前我使用的是旧的IOperationsProgressDialog,它确实可以工作,但是我希望Shell处理要求用户覆盖文件、权限问题等。如何从IStream创建IShellItem以在IFileOperation::Copy()中使用?
IFileOperation
IShellItem
IOperationsProgressDialog
IStream
IFileOperation::Copy()
l3zydbqr1#
您必须使用IBindCtx参数来传递额外的数据给解析器,在本例中是您自己的文件元数据,因此SHParseDisplayName()不会尝试访问真实的的文件来获取元数据。指向绑定上下文的指针,绑定上下文用于将参数作为输入和输出传递给分析函数。这些传递的参数通常特定于数据源,并由数据源所有者记录。**例如,文件系统数据源接受正在分析的名称(作为WIN32_FIND_DATA结构),使用STR_FILE_SYS_BIND_DATA绑定上下文参数。**可以传递STR_PARSE_PREFER_FOLDER_BROWSING以指示在可能的情况下使用文件系统数据源解析URL。使用CreateBindCtx构造绑定上下文对象,并使用IBindCtx::RegisterObjectParam填充值。有关这些对象的完整列表,请参见Bind Context String Keys。并在MSDN“Old New Thing”博客上详细概述:Creating a simple pidl: For the times you care enough to send the very fake🕗
IBindCtx
SHParseDisplayName()
1条答案
按热度按时间l3zydbqr1#
您必须使用
IBindCtx
参数来传递额外的数据给解析器,在本例中是您自己的文件元数据,因此SHParseDisplayName()
不会尝试访问真实的的文件来获取元数据。指向绑定上下文的指针,绑定上下文用于将参数作为输入和输出传递给分析函数。这些传递的参数通常特定于数据源,并由数据源所有者记录。**例如,文件系统数据源接受正在分析的名称(作为WIN32_FIND_DATA结构),使用STR_FILE_SYS_BIND_DATA绑定上下文参数。**可以传递STR_PARSE_PREFER_FOLDER_BROWSING以指示在可能的情况下使用文件系统数据源解析URL。使用CreateBindCtx构造绑定上下文对象,并使用IBindCtx::RegisterObjectParam填充值。有关这些对象的完整列表,请参见Bind Context String Keys。
并在MSDN“Old New Thing”博客上详细概述:
Creating a simple pidl: For the times you care enough to send the very fake🕗