Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows ITransferSource::MoveItem移动没有内容的文件夹_Windows_Shell_Drag And Drop_Explorer - Fatal编程技术网

Windows ITransferSource::MoveItem移动没有内容的文件夹

Windows ITransferSource::MoveItem移动没有内容的文件夹,windows,shell,drag-and-drop,explorer,Windows,Shell,Drag And Drop,Explorer,我患了NSE。它有文件和文件夹。实现了具有接口ITransferSource的组件。在拖放移动过程中,调用ITransferSource::MoveItem方法。MOVE必须作为COPY&DELETE来实现,所以我从\u WIN32ERROR\u返回HRESULT\u,而对于文件和E\u NOINTERFACE,返回的\u不是同一个\u设备。文件已成功移动,但文件夹未成功移动。以下是explorer执行的调用顺序: ITransferSource::MoveItem-我返回E_NOINTERFA

我患了NSE。它有文件和文件夹。实现了具有接口ITransferSource的组件。在拖放移动过程中,调用ITransferSource::MoveItem方法。MOVE必须作为COPY&DELETE来实现,所以我从\u WIN32ERROR\u返回HRESULT\u,而对于文件和E\u NOINTERFACE,返回的\u不是同一个\u设备。文件已成功移动,但文件夹未成功移动。以下是explorer执行的调用顺序:

ITransferSource::MoveItem-我返回E_NOINTERFACE ITransferSource::OpenItem-返回用于读取的资源 文件夹 IShellItemResources::GetSize-我为文件夹返回0 IShellItemResources::GetAttributes-I返回文件\属性\目录IShellFolder::EnumObjects-资源管理器 进入文件夹并枚举子项。对于每个项目,检查是否 项目是文件夹。 ITransferSource::RemoveItem-文件夹已删除
正如您所见,文件夹被复制和删除,但子文件夹项目被跳过。Explorer知道它们通过EnumObject存在,但不复制它们。

拖放复制工作正常。不要动。问题似乎已经解决了。复制项目时,其处理顺序为:父文件夹为第一个,子文件为最后一个。移动项目时,复制顺序不是删除顺序。复制:父文件夹是第一个,子文件是最后一个。删除:子文件是第一个,父文件夹是最后一个。好的,这是答案。当MoveItem从\u WIN32ERROR\u返回HRESULT\u时,相同的\u设备移动操作将在复制和删除时被替换。复制项时,将调用removietem,并注意dwFlags参数。它设置了TSF\U MOVE\U AS\U COPY\U DELETE位。在这种情况下,不要删除项目。其他项目将被复制,其他,其他。。。复制所有项目后,将再次调用RemoveItem,但没有标记TSF_MOVE_AS_COPY_DELETE。好的,您现在可以删除文件夹和文件了。结果代码COPYENGINE\u S\u DONT\u PROCESS\u子项也可以使用。