Можем ли мы бросить CWin32Error и дополнительный параметр с именем файла - PullRequest
0 голосов
/ 20 апреля 2019

Я использую CWin32Error для обработки исключений. Например, это фрагмент кода из InstallApplicationFiles (этот метод пытается скопировать ряд файлов из общей папки данных в папку пользовательских данных. Он также проверяет временные метки файлов, если они оба существуют):

if (!PathFileExists(strUserFilePath))
{
    // We must copy the default file
    if (!PathFileExists(strCommonFilePath))
    {
        // This should not happen as it is installed by the installer! Raise exception
        throw CWin32Error();
    }

    if (!::CopyFile(strCommonFilePath, strUserFilePath, FALSE))
    {
        // There was a problem copying the file! Raise exception
        throw CWin32Error();
    }
}

Телефонный код:

try
{
    InstallApplicationFiles();
}
catch (CWin32Error e)
{
    // This exception will be raised for PathFileExist, CopyFile, DeleteFile
    CString strError = _T("");
    strError.Format(_T("Installing application files.\n\nError: %s"), (LPCTSTR)e);
    AfxMessageBox(strError, MB_OK | MB_ICONWARNING);
    return FALSE; // Unable to proceed
}

Проблема в том, что время, в которое перехватывается исключение, мы больше не знаем, с каким файлом оно имеет проблему. В сообщении об ошибке просто указывается, что это за ошибка, но не указывается, с каким файлом. Есть ли способ выбросить CWin32Error с параметром, указывающим, какой файл вызвал ошибку?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...