最近,我遇到了SHFileOperation Windows API(在Windows 7操作系统中)的非常奇怪的行为。一个简单的C ++代码
TCHAR szFrom[_MAX_PATH+1];
_tcscpy(szFrom, From.c_str());
::PathAppend(szFrom, _T("*.*"));
*(szFrom + _tcslen(szFrom) + 1) = 0;
TCHAR szTo[_MAX_PATH+1];
_tcscpy(szTo, To.c_str());
*(szTo + _tcslen(szTo) + 1) = 0;
// Perform Copy operation
SHFILEOPSTRUCT Op = { GetDesktopWindow(), FO_COPY, szFrom, szTo,
FOF_NOCONFIRMMKDIR | FOF_NOCOPYSECURITYATTRIBS, 0, 0, 0 };
int Res = ::SHFileOperation(&Op);
if (Res != 0 || Op.fAnyOperationsAborted)
{
CString Message;
Message.Format(_T("Error code = %d"), Res);
AfxMessageBox(Message, MB_OK | MB_ICONWARNING);
}
仅将网络文件夹中的一部分文件(“From”参数)复制到本地文件夹(“To”参数)。我尝试了“FOF”标志的所有组合,试图以管理员身份运行 - 没有帮助。 SHFileOperation的返回码总是1223.我还检查了我对网络文件夹的访问权限 - 我拥有所有必要的权限:读,写,修改和执行。
最初我拥有的窗口句柄为0,并根据我的Google搜索中的某人建议将其更改为桌面窗口。这里显示的FOF_标志也是我试图了解发生了什么的许多变化的结果。复制的文件数和创建的子文件夹因试验而异,有时会出现进度对话框,有时(很少)甚至成功复制所有文件。但我从未收到过错误信息。
这种行为可能是什么原因,是否有办法克服这种情况?
PS:我看到了一些类似的问题,但没有人能理解答案。