SHFileOperation и FOF_NOERRORUI
Вот решил добавить новый раздел "Разработка", где буду публиковать свои находки как разработчика, что-то чего невозможно найти на MSDN, решения проблем, на которые натыкаюсь.
И вот первая такая находка.
Есть такая функция SHFileOperation, которая выполняет какую-то операции (копирование, удаление и т.п.) для многих файлов при этом показывает окошко с индикатором выполнение. Если же пользователь отменяет операцию, то устанавливается флаг fAnyOperationsAborted в структуре SHFILEOPSTRUCT. Если произойдет ошибка при выполнении операции, то пользователю предоставится возможность либо прекратить операцию, либо попробовать снова. Если пользователь выберет прекратить, то очевидно установится fAnyOperationsAborted. При этом функция вернет 0 (функция завершилась успешно).
Эту информацию вы можете найти и на MSDN. Чего вы не найдете на MSDN так это того, что если функции SHFileOperation передан флаг FOF_NOERRORUI (т.е. не показывать пользователю сообщений об ошибках), то если произойдет ошибка и операция будет прервана, то fAnyOperationsAborted установлен не будет. Вместо этого функция вернет код ошибки, которая произошла.
Таким образом правильно проверять закончилась ли операция успешно надо так:
SHFILEOPSTRUCT shop;
// заполнить shop
int status = SHFileOperation(&shop);
if (status == 0 && !shop.fAnyOperationsAborted)
{
// операция успешно завершена
}