SHFileOperation ошибка 87

Я пытаюсь скопировать содержимое диска 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;
}

2

Решение

Обратите внимание на документацию SHFILEOPSTRUCT и, в частности, pFrom а также pTo:

  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 на самом деле это указатель на список строк с нулевым символом в конце, который заканчивается пустой строкой.)

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]