//函式功能:
// 打開檔案
//函式輸入:
// char* pFileName
// 檔案名稱
// CFile *pFile
// 檔案句柄
// int FileType
// 0 源檔案,只讀檔案
// 1 目標檔案,創建并可寫
//函式回傳:
// 0 成功
// 1 指標為空
// 2 檔案操作例外
// 3 檔案打開失敗
int OpenFileEx(char* pFileName, CFile *pFile, int FileType)
{
BOOL bRet = 0;
CFileException e;
if ((pFileName == NULL) || (pFile == NULL))
{
return(1);
}
else
{
try
{
if (FileType == 0)
{
bRet = pFile->Open(pFileName, CFile::modeRead | CFile::typeBinary, &e);
}
else
{
bRet = pFile->Open(pFileName, CFile::modeCreate | CFile::modeWrite, &e);
}
if (bRet == TRUE)
{
return(0);
}
else
{
return(3);
}
}
catch (CFileException e)
{
return(2);
}
}
}
錯誤資訊:
error C2316: “CFileException”: 無法作為解構式捕獲,或者復制建構式不可訪問或已洗掉,或同時出現這兩種情況
uj5u.com熱心網友回復:
找到解決方法了,將catch (CFileException e)變成catch (CFileException *e)就可以了。有人知道這是為什么嗎?
uj5u.com熱心網友回復:
void AFXAPI AfxThrowFileException(int cause, LONG lOsError,
LPCTSTR lpszFileName /* == NULL */)
{
#ifdef _DEBUG
LPCSTR lpsz;
if (cause >= 0 && cause < _countof(rgszCFileExceptionCause))
lpsz = rgszCFileExceptionCause[cause];
else
lpsz = szUnknown;
TRACE3("CFile exception: %hs, File %s, OS error information = %ld.\n",
lpsz, (lpszFileName == NULL) ? _T("Unknown") : lpszFileName, lOsError);
#endif
THROW(new CFileException(cause, lOsError, lpszFileName));
}
uj5u.com熱心網友回復:
能具體說下嗎,有點沒看懂uj5u.com熱心網友回復:
CFile 投遞的 CFileException 是 new 出來的另外 catch 中 還要對應的 Delete
try
{
// Do something to throw a file exception.
}
catch( CFileException* theException )
{
if( theException->m_cause == CFileException::fileNotFound )
TRACE( "File not found\n" );
theException->Delete();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/30291.html
標籤:基礎類
上一篇:mfc 氣球上飄消失影片
