Welcome to TechNet Blogs Sign in | Join | Help

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)
{
    // операция успешно завершена
}

Published Friday, February 16, 2007 4:31 PM by vitalipro

Comments

Anonymous comments are disabled
 
Page view tracker