我正在使用here进行异常处理。例如,这是来自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
来说明导致错误的文件?