|
楼主 |
发表于 2016-10-10 12:13:02
|
显示全部楼层
C8:文件操作
1.Visual C++ 6.0支持以下两种文件类型
①文本文件,又称为ASCII字符文件,每一个字节存放一个ASCII字符
②二进制文件,内存中数据原样存放到磁盘
一个标准的Visual C++ 6.0文件是一个字节流或二进制流,这样的文件称之为流式文件。
2.文件函数
①文件的打开,FILE *fopen(const char *filename, const char *mode)
②文件的关闭,int fclose(FILE *stream)
③文件单个字符的读写
int fputc(int c, FILE *stream)
int fgetc(FILE *stream)
④文件一组字符的读写
size_t fread(void *buffer, size_t size, size_t count, FILE *stream)
size_t fwrite(const void *buffer, size_t size, size_t count, FILE *stream)
⑤文件的定位
定位到文件开头void rewind(FILE * stream)
定位到任何位置int fseek(FILE *stream, long offset, int origin)
返回当前的位置long ftell(FILE *stream)
3.Visual C++ 6.0的MFC提供的CFile类中封装了对文件的操作,从CFile类派生了CStdioFile类用于操作文本文件,派生了CMemFile用于操作内存文件。
①文件的打开和关闭
XXX.Open(LPCTSTR lpszFileName, UINT nOpenFlag, CFileException *pError = NULL)
XXX.Close()
②文件的读写
XXX.Read(void *lpBuf, UINT nCount)
XXX.Write(const void *lpBuf, UINT nCount)
③文件的定位
XXX.Seek(LONG lOff, UINT nForm)
XXX.SeekToBegin()
XXX.SeekToEnd()
XXX.GetPosition()
④文件的状态信息
XXX.GetStatus(CFileStatus &rStatus)
XXX.PASCAL GetStatus(LPCTSTR lpszFileName, CFileStatus &rStatus)
XXX.SetStatus(LPCTSTR lpszFileName, const CFileStatus &status)
⑤文件的异常操作由CFileException类用于支持处理
4.串行化(Serialization)也叫序列化,是一种对对象进行文件IO操作的机制。
串行化的基本思想是,一个对象能够将状态信息存储到文件或其他存储介质中,也可读取预先存储对象的状态信息,并动态建立该对象。
由MFC的CObject类提供支持对串行化的操作。
自动实现串行化例程--P198
手动实现串行化例程--P200
5.MFC提供了CArchive类,实现了运算符“《”和“》”的重载,通过与CFile类的配合,不仅实现了对简单类型如int、float等的文件读写,还实现了对可串行化对象的文件读写。
①CArchive函数CArchive(CFile *pFile, UINT nMODE, int nBufSize=4096, void *lpBuf=NULL)
②调用CArchive类成员函数IsLoading可以判断CArchive对象是否处于读状态,调用IsStoring函数可以判断CArchive对象是否处于写状态
③读写操作函数
调用CArchive类成员函数Read和Write可以读写指定字节数的缓冲区内容
调用CArchive类成员函数ReadString和WriteString可以读写字符串
调用CArchive类成员函数ReadObject和WriteObject可以执行对象的Serialize函数实现读写
调用CArchive类成员函数ReadClass和WriteClass可以读写一个CRuntimeClass指明类对象
调用CArchive类成员函数SerializeClass可以根据CArchive的读写状态直接进行读写操作
应用例程--P206
6.①临时文件扩展名“.tmp”,操作方法与常规文件一样,只是其文件名是调用API函数GetTempFileName获取的
UINT GetTempFileName(LPCTSTR lpPathName, LPCTSTR lpPrefixString, UINT uUnique, LPCTSTR lpTempFileName)
②文件查找函数
XXX.FindFile(LPCTSTR pstrName=NULL, DWORD dwUnused=0)
XXX.FindNextFile()
③复制文件
XXX.CopyFile(LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName, BOOL bFaillfExists)
创建新目录
XXX.CreateDirectory(LPCTSTR lpPathName, LPSECURITY_ATTRIBUTES lpSecurityAttributes)
删除现有文件
XXX.DeleteFile(LPCTSTR lpFileName)
对现有文件或目录重命名
XXX.MoveFile(LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName)
④文件删除到回收站
XXX.SHFileOperation(LPSHFILEOPSTRUCT lpFileOp)
⑤配置文件以“*.ini”为扩展名,可称之为初始化文件(Initialization File)或概要文件(Profile),一般用来存储程序的状态信息。
格式
[SECTION] //节
KEY=VALUE //关键字=值
调用GetPrivateProfileString和GetPrivateProfileInt函数可以从INI文件中读取信息
DWORD GetPrivateProfileString(LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpDefault, LPTSTR lpReturnedString, DWORD nSize, LPCTSTR lpFileName)
UINT GetPrivateProfileInt(LPCTSTR lpAppName, LPCTSTR lpKeyName, INT nDefault, LPCTSTR lpFileName)
调用WritePrivateProfileString函数可以将信息写入INI文件
BOOL WritePrivateProfileString(LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpString, LPCTSTR lpFileName)
|
|