当使用Shell32DLL SHFileOperation进行文件操作时,我遇到了一个与跨驱动器移动系统文件有关的问题(例如c:\到d :)。
移动时,将通过系统对话框提示用户,询问“您确定要移动此系统文件吗?[是,跳过,取消]”
这是我的移动操作的核心要素:
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。
如何解决这个问题?
关于SHFileOperation函数的MSDN: https://msdn.microsoft.com/en-us/library/windows/desktop/bb762164(v=vs.85).aspx
答案 0 :(得分:0)
FOF_NOCONFIRMATION
和/或FOF_NO_UI
标志有帮助吗?
如果不是,您可以使用IFileOperation
代替(Vista +)。如果你添加一个接收器,那么IFileOperationProgressSink::PostMoveItem
会告诉你每个移动操作的HRESULT
。