Копирование папки и ее содержимого

165
16 ноября 2018, 13:50
TCHAR path[MAX_PATH];
TCHAR toPath[MAX_PATH];
std::wcin >> path;
std::wcin >> toPath;
SHFILEOPSTRUCT fos;
ZeroMemory(&fos, sizeof(fos));
fos.wFunc = FO_MOVE;
fos.pFrom = path;
fos.pTo = toPath;
fos.fFlags = FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR | FOF_NOERRORUI | FOF_SILENT;
if (SHFileOperation(&fos))
    std::cout << "The directory is moved successfully!" << std::endl;
else
    std::cout << "[ERROR] The directory is not moved!" << std::endl;

Входные данные:

C:\\new
C:\\newgovno\\
C:\new
C:\newgovno\

Не копируется папка.

Answer 1

В документации указано, что члены структуры SHFILEOPSTRUCT pFrom и pTo должны в конце строки содержать двойной нуль-терминатор.

Т.е. к введенной строке вам следует добавлять еще один нулевой символ ('\0').

Решение будет выглядеть следующим образом:

// ...
TCHAR path[MAX_PATH];
TCHAR toPath[MAX_PATH];
std::wcin >> path;
std::wcin >> toPath;
path[lstrlen(path) + 1] = '\0';
path[lstrlen(path) + 1] = '\0';
SHFILEOPSTRUCT fos;
ZeroMemory(&fos, sizeof(fos));
fos.wFunc = FO_MOVE;
fos.pFrom = path;
fos.pTo = toPath;
fos.fFlags = FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR | FOF_NOERRORUI | FOF_SILENT;
// еще один момент
// функция SHFileOperation возвращает 0 в случае успешного выполнения
// и ненулевое значение если операция закончилась неуспешно
if (!SHFileOperation(&fos))
    std::cout << "good\n";
else
    std::cout << "bad\n";
// ...

Еще стоит заметить, что в качестве разделителя в пути файловой системы api принимает только \, но не /.

READ ALSO
Задача про улитку

Задача про улитку

Улитка ползет по вертикальному шесту высотой H метров, поднимаясь за день на A метров, а за ночь спускаясь на B метровНа какой день улитка доползет...

169
Состояние гонки данных

Состояние гонки данных

Есть ли что-то "опасное" в том, что два потока будут одновременно инкрементировать одну переменную? Я имею ввиду, может ли произойти такое,...

206
Кто готов дожить до 2038 года?

Кто готов дожить до 2038 года?

Когда-то это казалось недостижимымНо пришло время, и даже PVS стал на это ругаться (при сборке 32-битности, само собой - а необходимость в этом...

136
Проблемы с Jackson и ResultSet JAVA

Проблемы с Jackson и ResultSet JAVA

У меня spring mvcЯ хожу в базу (PostgreSQL) вот так вот : select array_to_json(array_agg(t1)) from shops as t1

152