CFile类
1、特点
(1) MFC中文件类的基类。
(2) 二进制(字节)读写。
(3) 带参数的构造函数自动打开文件,析构自动关闭文件。
(4) 文件打开方式组合:5个类别 = 读写+字符+共享+创建+缓存
a) 读写(access mode):modeRead(默认)、modeWrite、modeReadWrite
b) 字符(character mode):typeBinary、typeText、typeUnicode
CFile只处理二进制文件,字符模式只用于派生类中。
typeUnicode用于字符配置为Unicode的应用程序。
c) 共享(share mode):shareDenyNone、shareDenyRead、shareDenyWrite、shareExclusive(独占,默认)
d) 创建(creation mode):modeCreate(覆盖)、modeNoTruncate(附加,默认)
共同点:没有则创建。
区别:文件存在modeCreate 覆盖,modeNoTruncate附加。
e) 缓存(caching mode):osNoBuffer、osRandomAccess、osSequentialScan、osWriteThrough
默认系统使用通用缓冲方案,该方案不作为选项。
2、公共方法:
(1) Open
a) 通过返回值判断是否成功。
b) 示例:
CFile MyFile;
if( !MyFile.Open( "no_such_a_file", CFile::modeRead) )
{
AfxMessageBox( "open error!" );
}
(2) Abort、Close关闭文件
a) 区别:Abort关闭文件会忽略异常,并且不会发生中断。
(3) Duplicate构造重复的文件对象。
(4) Flush刷新缓存区,强制输出缓存区内容。
(5) LockRange、UnlockRange:锁定文件中指定区域内容,禁止其他线程访问。
(6) Read、write字节读写
(7) Remove删除
(8) Rename重命名
(9) Seek、seektobegin、seektoend文件定位
(10) 获取文件信息:GetFileName、GetFilePath、GetFileTitle、GetLength、GetPosition、GetStatus。
(11) 设置更改文件信息:SetFilePath、SetLength、SetStatus。
3) 公共数据成员
(1) hFileNull确定是否有合法句柄
(2) m_hFile文件句柄
4) 示例:
(1) 在构造时打开文件。
try
{
CFile sysFile(_T("C:\\WINDOWS\\SYSTEM.INI"), CFile::modeRead);
sysFile.Close();
}
catch (CFileException* pEx)
{
pEx->ReportError();
pEx->Delete();
}
(2) 使用open打开文件。
CFile MyFile;
if( !MyFile.Open( "no_such_a_file", CFile::modeRead) )
{
AfxMessageBox( "open error!" );
MyFile.abort();
Return;
}
try
{//文件操作
}
catch (CFileException* pEx)
{
pEx->ReportError();
pEx->Delete();
}
CStdioFile类
1、特点
(1)继承CFile;
(2)可以按行读写文本:ReadString、WriteString;
(3)WriteString向文件中写文本时,需要添加换行符“\n”。
注:WriteString会自定补全回车换行符,即将“\n”或"\r"都会自动转换为"\r\n",如果添加了"\r\n",则会自动转换为"\r\n\r\n"
(4)其他用法参考CFile