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



我正在尝试使用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";
s.pFrom = "C:\Users\styler\Desktop\Software\Folder2\Folder3\*";
SHFileOperation(&s);

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

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

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

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

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

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

最新更新