**问题:**使用SHFileOperation复制文件夹时,编译通过,没问题,程序运行返回183(成功返回0),当然文件夹也没成功复制过去。(开发环境是vs2013,win10)
在网上查了好多,有说加个’\0’的,也有说加两个’\0’的,还有说编码方式不对的(ANSI和UNICODE),林林总总,试了好多还是没解决。
直到我把目标路径由
“E:/statistics/”
改成
“E:\statistics\”
后再次运行就好了…
就一个正斜杠和反斜杠的区别困了半天…
其它
奇怪的是,我只把目标路径中的 正斜杠 改成了 反斜杠 ,源目录并没有变,就复制成功了。没有搞明白为什么,有路过的大神还望赐教~
int CopyItem(std::string Source, std::string ObjCat)
{
SHFILEOPSTRUCT fop;
fop.wFunc = FO_COPY; // 可选FO_COPY,FO_DELETE,FO_RENAME,FO_MOVE
fop.pFrom = Source.c_str(); // 源目录
fop.pTo = ObjCat.c_str(); // 目标目录
fop.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR;
return SHFileOperation(&fop);
}
参考:
微软:https://learn.microsoft.com/zh-CN/windows/win32/api/shellapi/nf-shellapi-shfileoperationa
微软官方显示0xb7的含义是 “操作期间已超出MAX_PATH”。