1

我开发 NSE。它有文件和文件夹。实现了接口 ITransferSource 的组件。在拖放 (MOVE) 方法期间,调用 ITransferSource::MoveItem()。MOVE 必须作为 COPY&DELETE 实现,因此我为文件和 E_NOINTERFACE 返回 HRESULT_FROM_WIN32(ERROR_NOT_SAME_DEVICE)。文件已成功移动,但文件夹未成功移动。以下是资源管理器执行的调用顺序:

  1. ITransferSource::MoveItem() - 我返回 E_NOINTERFACE
  2. ITransferSource::OpenItem() - 我返回用于读取文件夹的资源。
  3. IShellItemResources::GetSize() - 我为文件夹返回 0
  4. IShellItemResources::GetAttributes() - 我返回 FILE_ATTRIBUTE_DIRECTORY IShellFolder::EnumObjects() - 资源管理器进入文件夹并枚举子项。对于每个项目,检查项目是否为文件夹。
  5. ITransferSource::RemoveItem() - 文件夹被删除

如您所见,文件夹被复制和删除,但子项被跳过。Explorer 知道它们存在(通过 EnumObjects)但不会复制它们。

4

0 回答 0