//函数功能:
// 打开文件
//函数输入:
// 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”: 无法作为析构函数捕获,或者复制构造函数不可访问或已删除,或同时出现这两种情况
有人知道这是为什么吗?
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));
}
另外 catch 中 还要对应的 Deletetry
{
// Do something to throw a file exception.
}
catch( CFileException* theException )
{
if( theException->m_cause == CFileException::fileNotFound )
TRACE( "File not found\n" );
theException->Delete();
}