0

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

“const char *”类型的值不能分配给“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\0";
s.pFrom = "C:\\Users\\styler\\Desktop\\Software\\Folder2\\Folder3\\*\0";
SHFileOperation(&s);

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

4

1 回答 1

3

编译器告诉您您正在尝试将char字符串文字分配给wchar_t字符串指针 ( PCZZWSTR= CONST WCHAR *)。这意味着您必须使用UNICODEdefined 进行编译,其中SHFileOperation()映射到SHFileOperationW()which 需要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\0";
s.pFrom = L"C:\\Users\\styler\\Desktop\\Software\\Folder2\\Folder3\\*\0";
SHFileOperation(&s);

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

SHFILEOPSTRUCT s = { 0 };
s.hwnd = hWnd;
s.wFunc = FO_COPY;
s.fFlags = FOF_SILENT;
s.pTo = TEXT("C:\\Users\\styler\\Desktop\\Folder1\0");
s.pFrom = TEXT("C:\\Users\\styler\\Desktop\\Software\\Folder2\\Folder3\\*\0");
SHFileOperation(&s);
于 2021-01-11T21:02:36.133 回答