MFC Windows 程序设计 第六章 文件I/O与串行化

来源:互联网 发布:海迅开料软件 编辑:程序博客网 时间:2024/06/06 11:04
  
第六章 文件I/O与串行化
1、CFile类,封装Win32 api用来读写文件的部分,使用时最好捕捉异常(CFileException,使用完后删除异常类),子类CMemFile、CShareFile、CSocketFile、CStdioFile(ReadString、WriteString)
   属性:m_hFile、m_strFileName
   函数:GetFilePath、GetFileName、GetFileTitle、Open、Close、Read、Write、GetPosition、Seek(第二个参数确定偏移值位置,begin、end、current)、SeekToBegin、SeeToEnd。
         Rename、Remove
   读写模式:modeReadWrite、modeRead、modewrite
   共享模式:shareDenyNone(非独占方式打开) shareDenyWrite shareDenyRead shareExclusive(禁止读写,默认值)
   异常类CFileException:ReportError,m_cause。
2、枚举文件夹和文件,WIN32_FIND_DATA结构中dwFileAttrbutes是否包含FILE_ATTRIBUTE_DIRECTORY可确定当前项是文件夹还是文件,cFileName和cAlternateFileName保存长的文件名和短的文件名
   函数:::FindFirstFile(返回值是INVALID_HANDLE_VALUE以为的任何值,填充WIN32_FIND_DATA结构,返回值为文件句柄),::FindNextFile(返回值不为NULL),::SetCurrentDirectory。   
3、串行化与并行化,应用程序使用CArchive对象实现读写工作,而CArchive对象转而利用CFile函数实现文件I/O,串行化是将持久性数据串行化为档案(<<),
   并行化是将数据从档案中读出去,串行化是文档/视图结构的基础(>>),CArchive类是用来操作串行化的类,相当于档案,
   可用 CArchive>>读出数据,使用CArchive<<保存数据,IsStoring()返回值为非零值,则数据串行化档案,出现异常:CMemoryException(内存不足)、CFileException(I/O错误)、CArchiveException(其他串行化错误)。
   可串行化类:BYTE WORD DWORD LONG float double int unsigned int short char CString CTime CSize CPoint CRect
   串行化类方法:
   1、继承自CObject的派生类;2、类的说明中增加 DECLARE_SERIAL宏;3、重载基本类的Serialize函数,并串行化派生类的数据成员;4、如果派生类没有默认构造函数,则创建一个;
   5、在类的实现中,写入MFC的IMPLEMENT_SERIAL宏,此宏接收模式号(版本号)参数
4、串行化类的向下兼容
   1、将IMPLEMENT_SERIAL宏中的模式号与VERSIONABLE_SCHEMA(屏蔽CArchiveException异常)相与;2、修改类的Serialize函数,使用GetObjectSchema(只能调用一次)获取对象的模式号,根据模式号并行化对象。
5、CObject类的串行化,MFC为CObject指针重载了CArchive的插入和提前运算符,但没对CObject类进行重载,有以下两个方法可以对CObject进行值串行化。
   1、CLine line(CPoint(0,0),CPoint(100,50)); ar << &line             CLine* pLine ar >> pLine ; CLIne line = *pLine; delete pLine;
   2、调用类的串行化函数:CLine line(CPoint(0,0),CPoint(100,50)); line.Serialize(ar);  CLine line; line.Serialize(ar);该方法没有写入模式号,使用GetObjectSchema返回-1,无法实现多版本兼容。

原创粉丝点击