在使用 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