CFile savfile;
这个 CFile对象还没打开一个文件就拿来用了。
看下MSDN上CFile类的说明,创建CFile对象的时候要么用带参数的构造函数来打开一个文件,要么用 CFile::Open方法。
CFile::CFile
CFile( );
CFile(int hFile);
CFile(LPCTSTR
lpszFileName,UINT nOpenFlags);
throw(CFileException);
参数:
hFile 已打开的文件句柄。
lpszFileName 所需文件的路径字符串,此路径可为相对的也可为绝对的路径。
nOpenFlags 共享和访问模式,指定当打开文件时进行的动作,可以将以下所列用OR(|)操作符联起来。至少应有一个访问权限和一个共享选项,modeCreate和modeNoInherit是可选的。值如下所示:·
CFile::modeCreate
调用构造函数构造一个新文件,如果文件已存在,则长度变成0。
·
CFile::modeNoTruncate
此值与modeCreate组合使用。如果所创建的文件已存在则其长度不变为0。因而此文件被打开,或者作为一个新文件或者作为一个已存在的文件。这将是很有用的,例如当打开一个可能存在也可能不存在的文件时。这个选项也可用于CStdioFile.
·
CFile::modeRead
打开文件仅供读。
·
CFile::modeReadWrite
打开文件供读写。
·
CFile::modeWrite
打开文件仅供写。
·
CFile::modeNoInherit
阻止文件被子进程继承。
·
CFile::ShareDenyNone
不禁止其它进程读或写访问,打开文件。如果文件已被其它进程以兼容模式打开,则Create失败。
·
CFile::ShareDenyRead
打开文件,禁止其它进程读此文件。如果文件已被其它进程以兼容模式打开,或被其它进程读,则Create失败。
·
CFile::ShareDenyWrite
打开文件,禁止其它进程写此文件。如果文件已被其它进程以兼容模式打开,或被其它进程写,则Create失败。
·
CFile::ShareExclusive
以独占模式打开文件,禁止其它进程对文件的读写。如果文件已经以其它模式打开读写(即使被当前进程),则构造失败。
·
CFile::ShareCompat
此标志在32位MFC中无效。此标志在使用CFile::Open时映射为CFile::ShareExclusive。
·
CFile::typeText
对回车换行设置特殊进程(仅用于派生类)。
·
CFile::typeBinary
设置二进制模式(仅用于派生类)。
说明:
缺省的构造函数不打开文件,而是将m_hFile设置为CFile::hFileNull。因为此构造函数不产生异常,故不使用TRY/CATCH逻辑操作。使用Open成员函数,然后直接测试异常状态。有关异常处理的策略,可参阅联机文档“Visual
C++程序员指南”中的“异常”。
带一个参数的构造函数构造一个CFile对象,对应于由hFile标识的操作系统文件。对访问模式或文件类型不作检查。当CFile对象被析构时,操作系统文件不会关闭,必须手工关闭它。
带两个参数的构造函数构造一个CFile对象,并打开给定路径的相对应的操作系统文件。构造函数将第一个构造函数和Open成员函数组合起来。当打开文件出错时产生一个异常。通常这说明这种错误不可解决,用户将被警告。
示例:
//
example for CFile::CFile
char* pFileName = "test.dat";
TRY
{
CFile
f(pFileName, CFile::modeCreate |
CFile::modeWrite);
}
CATCH(CFileException,e)
{
#ifdef
_DEBUG
afxDump<<"File could not be
opened"<
#endif
}
END_CATCH