0

在使用 Shell32DLL SHFileOperation 进行文件操作时,我遇到了一个与跨驱动器移动系统文件相关的问题(例如,c:\ 到 d:)。

移动时,系统对话框会提示用户“您确定要移动此系统文件吗?[Yes, Skip, Cancel]”

下面是我的move操作的核心精髓:

SHFILEOPSTRUCT struc = new SHFILEOPSTRUCT();
struc.pFrom = fromPtr;
struc.pTo = toPtr;
struc.wFunc = FO_MOVE;
struc.fFlags = 0; // no relevant flags for this
struc.hwnd = 0;
struc.lpszProgressTitle = string.Empty;
struc.fAnyOperationsAborted = false; // initialized to FALSE

int res = SHFileOperation(ref struc);

操作返回 0x0 即成功,但返回的 fAnyOperationsAborted 为 TRUE,即使用户接受移动系统文件。在这种情况下,我希望操作返回 fAnyOperationsAborted=FALSE。

问题是我无法区分用户接受、跳过或取消操作,因为 fAnyOperationsAborted 在所有三种情况下都是 TRUE。

如何解决这个问题?

MSDN 关于 SHFileOperation 函数: https ://msdn.microsoft.com/en-us/library/windows/desktop/bb762164(v=vs.85).aspx

4

1 回答 1

0

FOF_NOCONFIRMATION和/或FOF_NO_UI标志有帮助吗?

如果没有,您可以IFileOperation改用 (Vista+)。如果你添加一个接收器,那么IFileOperationProgressSink::PostMoveItem会告诉你HRESULT每个移动操作的。

于 2018-03-22T10:09:36.447 回答