SHFileOperation无法复制源文件夹中的所有文件

时间:2016-03-20 16:53:33

标签: c++ windows winapi

最近,我遇到了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:我看到了一些类似的问题,但没有人能理解答案。

0 个答案:

没有答案