Visual C++第10章.pptVIP

  • 7
  • 0
  • 约3.55千字
  • 约 18页
  • 2017-01-10 发布于江苏
  • 举报
第10章 文 件 操 作 本章要点: 文档类串行化的原理。 用CFile类实现文件的读写操作。 文件的输入/输出流。 10.1 串行化 文件操作是实现一个程序必不可少的内容。一个完整的应用程序,必然要将客户的信息进行存储、读取、修改等操作,还要考虑信息文件的格式问题。在MFC AppWizard自动生成的程序框架中,直接集成了对于文件操作的支持,用户只需添加所需功能的程序代码即可。 MFC使用CArchive类对象作为串行化对象和存储介质之间的中介,这个对象总是和一个包含有必需的文件信息的CFile对象相关联,这个CFile对象中实际打开了记录信息的某个文件,执行串行化操作的对象可以使用CArchive对象去读或写,不必考虑存储介质上的文件情况。 10.1.1 MFC程序框架支持的文档结构 在MFC AppWizard生成MFC AppWizard[exe]程序框架时,如果在MFC AppWizard-Step1对话框中选择了Document/View architecture support,将会在自动生成的程序中支持CDocument派生类的Serialize成员函数的操作。 10.1.2 CArchive类 CArchive类没有基类,它提供了串行化对象从文件中读/写的类型安全缓冲机制,可以认为CArchive对象是一种二进制流,就像输入/输出流一样,可以高效地处理二进制对象数据。 使用CArchive对象之前,必须先创建一个CFile对象,同时保证CArchive读写标志的设置和文件打开方式相一致。对于一个CArchive对象,可以进行存储,也可以读取,但不能二者同时进行。 10.1.3 直接使用串行化 除了在MFC程序框架中使用串行化外,也可以在需要的时候直接使用。例如,从一个内存文件所代表的剪贴板中串行化数据,或者使用程序框架的用户接口来读写框架不支持的文件等。这些问题可以采取与程序框架相同的方法,步骤如下: (1)创建CFile对象或派生类对象。 (2)将CFile对象传递给CArchive,创建CArchive对象 (3)使用CArchive对象完成串行化操作。 (4)当串行化操作完成后应关闭CArchive和CFile, 10.2 CFile类 CFile类是MFC的最基本的文件操作类。在前面讲到CFile类可以和CArchive一起完成串行化操作,它也能够直接用于对文件的存取,通过派生类还支持了文本文件和内存文件的操作。 10.2.1 打开和关闭文件 在CFile类的构造函数中可以直接打开某个文件: CFile( int hFile ); CFile( LPCTSTR lpszFileName, UINT nOpenFlags ); 10.2.2 文件的定位 CFile类是一种随机读写的文件操作,用于描述当前文件读写位置的叫“文件指针”,在文件刚被打开时,文件指针定位于文件起始处。 为了控制文件读写的位置,CFile类提供了一系列的文件位置操作函数: virtual LONG Seek( LONG lOff, UINT nFrom ); void SeekToBegin( ); DWORD SeekToEnd( ); 10.2.3 文件的读写操作 MFC的CFile类的文件读写操作和C语言运行时刻库中的文件处理函数较为类似。除了可以用CArchive类进行读写之外,还可以用这里要介绍的CFile类进行读写操作。 在读写之前,可以使用文件的定位函数,将文件指针定位到自己需要读写的地方。文件在刚打开时,文件指针自动定位在文件开始处。 10.2.4 文件的管理 在CFile类中,为了便于管理和使用文件,提供了一些函数: BOOL GetStatus( CFileStatus rStatus ) const; static BOOL PASCAL GetStatus( LPCTSTR lpszFileName, CFileStatus rStatus ); 这两个函数用于获取文件的状态信息,这些信息存放在一个CFileStatus结构中,主要有文件的创建、更新时间、属性和文件名等。 static void SetStatus( LPCTSTR lpszFileName, const CFileStatus status ); 10.2.5 文件异常 由于在文件操作时一些经常容易发生的情况,例如:磁盘满、文件校验错误等,会导致访问文件时发生异常,MFC设计了CFileException类来支持对于文件异常的处理。 在Open成员函数的参数中,就可以指明CFileException对象指针。如果发生

文档评论(0)

1亿VIP精品文档

相关文档