1

NSEを開発しています。ファイルとフォルダがあります。インターフェイス ITransferSource を持つコンポーネントが実装されています。ドラッグ アンド ドロップ (MOVE) メソッド中に ITransferSource::MoveItem() が呼び出されます。MOVE は COPY&DELETE として実装する必要があるため、ファイルの場合は HRESULT_FROM_WIN32(ERROR_NOT_SAME_DEVICE) を返し、E_NOINTERFACE を返します。ファイルは正常に移動されますが、フォルダーは移動されません。エクスプローラーが実行する呼び出しのシーケンスは次のとおりです。

  1. ITransferSource::MoveItem() - E_NOINTERFACE を返す
  2. ITransferSource::OpenItem() - フォルダーの読み取り用のリソースを返します。
  3. IShellItemResources::GetSize() - フォルダーに 0 を返す
  4. IShellItemResources::GetAttributes() - FILE_ATTRIBUTE_DIRECTORY を返します IShellFolder::EnumObjects() - エクスプローラーがフォルダーに入り、子アイテムを列挙します。アイテムごとに、アイテムがフォルダーかどうかがチェックされます。
  5. ITransferSource::RemoveItem() - フォルダーが削除されます

ご覧のとおり、フォルダーはコピーおよび削除されますが、子アイテムはスキップされます。エクスプローラーは、(EnumObjects を介して) それらが存在することを認識していますが、それらをコピーしません。

4

0 に答える 0