说明
使用CStdioFile处理文件的时候,有时候遇到一个CStdioFile类,不知道该类有没有打开文件,此时贸然使用Open试图打开文件时就会程序异常中断,而且CStdioFile是没有标志位判断其是否打开的,就非常坑。解决思路就是再CStdioFile基础上写一个派生类,改写一下Open和Close函数,为其增加一个判断的标志位即可。
class CMyFile :public CStdioFile
{
public:
CMyFile();
virtual ~CMyFile();
virtual BOOL Open(LPCTSTR lpszFileName,UNIT nOpenFlags,CFileException *pError==NULL);
virtual void Close();
BOOL IsOpen();
private:
BOOL m_isOpen;
};
CMyFile::CMyFile()
{
m_isOpen=FALSE;
}
CMyFile::~CMyFile()
{
}
BOOL CMyFile::Open(LPCTSTR lpszFileName,UNIT nOpenFlags,CFileException *pError)
{
if(CStdioFile::Open(lpszFileName,OpenFlags,pError))
{
m_isOpen=TRUE;
return TRUE;
}
return FALSE;
}
void CMyFile::Close()
{
if(CStdioFile::Close())
{
m_isOpen=FALSE;
}
}
BOOL CMyFile::IsOpen()
{
return m_isOpen;
}
最后
上面的程序是可能会有纯手打的,可能存在问题,思路应该没问题。这样就可以正确根据IsOpen的返回值判断文件是否打开了。