使用 SHFileOperation() 复制文件夹时出错

Error using SHFileOperation() to copy a folder

我正在尝试使用 SHFileOperation() 复制文件夹,但出现此错误:

a value of type "const char *" cannot be assigned to an entity of type "PCZZWSTR"

s.pTos.pFrom

我使用的代码是:

SHFILEOPSTRUCT s = { 0 };
s.hwnd = hWnd;
s.wFunc = FO_COPY;
s.fFlags = FOF_SILENT;
s.pTo = "C:\Users\styler\Desktop\Folder1[=10=]";
s.pFrom = "C:\Users\styler\Desktop\Software\Folder2\Folder3\*[=10=]";
SHFileOperation(&s);

我在 s.pTos.pFrom 中做错了什么?我将它们设置为等于目标文件夹和源文件夹,但为什么这不起作用?

编译器告诉您您正在尝试将 char 字符串文字分配给 wchar_t 字符串指针 (PCZZWSTR = CONST WCHAR *)。这意味着您必须使用定义的 UNICODE 进行编译,其中 SHFileOperation() 映射到 SHFileOperationW(),它需要 wchar_t* 字符串指针而不是 char* 字符串指针。

因此,您需要在字符串文字前加上 L 前缀,例如:

SHFILEOPSTRUCT s = { 0 };
s.hwnd = hWnd;
s.wFunc = FO_COPY;
s.fFlags = FOF_SILENT;
s.pTo = L"C:\Users\styler\Desktop\Folder1[=10=]";
s.pFrom = L"C:\Users\styler\Desktop\Software\Folder2\Folder3\*[=10=]";
SHFileOperation(&s);

或者,由于您实际使用的是 SHFileOperation()TCHAR 版本,请使用 TEXT() 宏将您的字符串文字与 [=22= 使用的实际字符类型相匹配]:

SHFILEOPSTRUCT s = { 0 };
s.hwnd = hWnd;
s.wFunc = FO_COPY;
s.fFlags = FOF_SILENT;
s.pTo = TEXT("C:\Users\styler\Desktop\Folder1[=11=]");
s.pFrom = TEXT("C:\Users\styler\Desktop\Software\Folder2\Folder3\*[=11=]");
SHFileOperation(&s);