MFC下的文件类文件操作的方法使用VisualC++编程,有如下方法进行文件操作:(1)使用标准C运行库函数,包括fopen、fclose、fseek等。(2)使用Win16下的文件和目录操作函数,如lopen、lclose、lseek等。不过,在Win32下,这些函数主要是为了和Win16向后兼容。(3)使用Win32下的文件和目录操作函数,如CreateFile,CopyFile,DeleteFile,FindNextFile,等等。Win32下,打开和创建文件都由CreateFile完成,成功的话,得到一个Win32下的句柄,这不同于“C”的fopen返回的句柄。在Win16下,该句柄和C运行库文件操作函数相容。但在Win32下,“C”的文件操作函数不能使用该句柄,如果需要的话,可以使用函数_open_osfhandle从Win32句柄得到一个“C”文件函数可以使用的文件句柄。关闭文件使用Win32的CloseHandle。在Win32下,CreateFile可以操作的对象除了磁盘文件外,还包括设备文件如通讯端口、管道、控制台输入、邮件槽等等。(4)使用CFile和其派生类进行文件操作。CFile从CObject派生,其派生类包括操作文本文件的CStdioFile,操作内存文件的CmemFile,等等。CFile是建立在Win32的文件操作体系的基础上,它封装了部分Win32文件操作函数。最好是使用CFile类(或派生类)的对象来操作文件,必要的话,可以从这些类派生自己的文件操作类。统一使用CFile的界面可以得到好的移植性。MFC的文件类MFC用一些类来封装文件访问的Win32API。以CFile为基础,从CFile派生出几个类,如CStdioFile,CMemFile,MFC内部使用的CMiororFile,等等。1.CFile的结构1.CFile定义的枚举类型CFile类定义了一些和文件操作相关的枚举类型,主要有四种:OpenFlags,Attribute,SeekPosition,hFileNull。下面,分别解释这些枚举类型。1.OpenFlagsOpenFlags定义了13种文件访问和共享模式:enumOpenFlags{//第一(从右,下同)至第二位,打开文件时访问模式,读/写/读写modeRead=0x0000,modeWrite=0x0001,modeReadWrite=0x0002,shareCompat=0x0000,//32位MFC中没用//第五到第七位,打开文件时的共享模式shareExclusive=0x0010,//独占方式,禁止其他进程读写shareDenyWrite=0x0020,//禁止其他进程写shareDenyRead=0x0030,//禁止其他进程读shareDenyNone=0x0040,//允许其他进程写//第八位,打开文件时的文件继承方式modeNoInherit=0x0080,//不允许子进程继承//第十三、十四位,是否创建新文件和创建方式modeCreate=0x1000,//创建新文件,文件长度0modeNoTruncate=0x2000,//创建新文件时如文件已存在则打开//第十五、十六位,文件以二进制或者文本方式打开,在派生类CStdioFile中用typeText=0x4000,typeBinary=(int)0x8000};2.AttributeAttribute定义了文件属性:正常、只读、隐含、系统文件,文件或者目录等。enumAttribute{normal=0x00,readOnly=0x01,hidden=0x02,system=0x04,volume=0x08,directory=0x10,archive=0x20}3.SeekPositionSeekPosition定义了三种文件位置:头、尾、当前:enumSeekPosition{begin=0x0,current=0x1,end=0x2};4.hFileNullhFileNull定义了空文件句柄enum{hFileNull=-1};CFile的其他一些成员变量CFile除了定义枚举类型,还定义了一些成员变量。例如:UINTm_hFile该成员变量是public访问属性,保存::CreateFile返回的操作系统的文件句柄。MFC重载了运算符号HFILE来返回m_hFile,这样在使用HFILE类型变量的地方可以使用CFile对象。BOOLm_bCloseOnDelete;CStringm_strFileName;这两个成员变量是protected访问属性。m_bCloseOnDelete用来指示是否在关闭文件时删除CFile对象;m_strFileName用来保存文件名。CFile的成员函数CFile的成员函数实现了对Win32文件操作函数的封装,完成以下动作:打开、创建、关闭文件,文件指针定位,文件的锁定与解锁,文件状态的读取和修改,等等。其中,用到了m_hFile文件句柄的一般是虚拟函数,和此无关的一般是静态成员函数。一般地,成员函数被映射到对应的Win32函数,如表11-1所示。表11-1CFile函数对Win32文件函数的封装虚拟静态成员函数对应的Win32函数文件的创建、打开、关闭√AbortCloseHandle√DuplicateDuplicateHandle√OpenCreateFile√CloseCloseHan...