Я использую 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
с параметром, указывающим, какой файл вызвал ошибку?