gpt4 book ai didi

c++ - SHFileOperation 错误 87

转载 作者:搜寻专家 更新时间:2023-10-31 01:32:47 27 4
gpt4 key购买 nike

我正在尝试将 A 驱动器的内容复制到文件夹 C:\test\disk1 中。文件夹 disk1 已经存在。该程序编译但运行时出现错误 87。我知道错误 87 与无效参数有关,但我不确定问题出在哪里。有人有什么想法吗?

#include <Windows.h>
#include <stdio.h>

int main(int argc, char ** argv)
{
const wchar_t *const sourceFile = L"A:\\";
const wchar_t *const outputFile = L"C:\\test\\disk1";

SHFILEOPSTRUCTW fileOperation;
memset(&fileOperation, 0, sizeof(SHFILEOPSTRUCTW));

fileOperation.wFunc = FO_COPY;
fileOperation.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR |
FOF_NOERRORUI | FOF_FILESONLY;
fileOperation.pFrom = sourceFile;
fileOperation.pTo = outputFile;

int result = SHFileOperationW(&fileOperation);
if (result != 0)
{
printf("SHFileOperation Failure: Error%u\n", result);
return 1;
}

memset(&fileOperation, 0, sizeof(SHFILEOPSTRUCTW));

printf("OK\n");
return 0;
}

最佳答案

注意 SHFILEOPSTRUCT 的文档尤其是 pFrompTo:

  PCZZTSTR     pFrom;
PCZZTSTR pTo;

PCZZTSTR 是什么意思?

pFrom
Type: PCZZTSTR
Note This string must be double-null terminated.

因此您的解决方法是提供一个额外的尾随零。

const wchar_t *const sourceFile = L"A:\\\0";
const wchar_t *const outputFile = L"C:\\test\\disk1\0";

请注意,Windows API 函数接受 / 作为目录分隔符,因此可以将其编写为更易于阅读的形式:

const wchar_t *const sourceFile = L"A:/\0";
const wchar_t *const outputFile = L"C:/test/disk1\0";

(PCZZSTR 实际上是指向以空字符串结尾的零终止字符串列表的指针。)

关于c++ - SHFileOperation 错误 87,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42555049/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com