如何将文件从回收站还原到特定位置?

时间:2015-03-18 18:17:22

标签: c++ windows winapi windows-shell recycle-bin

我的目标是将特定文件从回收站还原到指定位置,即不将其还原到其原始位置。我找到了this articlethis one,它们解释了如何枚举当前在回收站中的文件。但它没有显示如何做我需要的。

知道该怎么做吗?

3 个答案:

答案 0 :(得分:2)

你可以通过模拟拖动和放大来实现。下降。使用IShellFolder::GetUIObjectOf()从回收站获取IDataObject接口,并获取目标文件夹的IDropTarget接口。然后,您可以拨打IDropTarget::DragEnter(),然后拨打IDropTarget::Drop(),该文件将移至您的目标位置。

答案 1 :(得分:2)

从Windows Vista开始,可以使用IFileOperation将任何对象从RecycleBin还原到任何文件夹。用法示例:

procedure RestoreItem(AShellFolder: IShellFolder; AChild: PItemIDList; const ADestFolder: UnicodeString);
var
  Item: IShellItem;
  DestFolder: IShellItem;
  FileOperation: IFileOperation;
begin
  OleCheck(SHCreateItemWithParent(nil, AShellFolder, AChild, IShellItem, Item));
  try
    OleCheck(SHCreateItemFromParsingName(PWideChar(ADestFolder), nil, IShellItem, DestFolder));
    try
      OleCheck(CoCreateInstance(CLSID_FileOperation, nil, CLSCTX_ALL, IFileOperation, FileOperation));
      try
        OleCheck(FileOperation.MoveItem(Item, DestFolder, nil, nil));
        OleCheck(FileOperation.PerformOperations);
      finally
        FileOperation := nil;
      end;
    finally
      DestFolder := nil;
    end;
  finally
    Item := nil;
  end;
end;

答案 2 :(得分:0)

拖放就是这样。

然后您可以使用 C++、Python、CMD、PowerShell 等编写脚本...

enter image description here