CFile类

来源:互联网 发布:淘宝卖家收到法院传票 编辑:程序博客网 时间:2024/05/18 03:33

MFC提供了CFile类方便文件的读写,首先要知道,文件的数据读取、数据写入与文件指针的操作都是以字节为单位的,数据的读取和写入都是从文件指针的位置开始的,当打开一个文件的时候,文件指针总是在文件的开头。#include <afx.h> 常规方法如下:

CFile file;

file.Open( LPCTSTR lpszFileName, UINTnOpenFlags, CFileException*pError= NULL );

//pszFileName是文件名,可包含文件路径,若只有文件名,则默认路径为工程路径,nOpenFlags是文件打开模式,pError是打开失败时用来接收失败信息,一般设置为NULL。

nOpenFlags的常用模式有:

CFile::modeCreate     若打开文件不存在,则创建一个新文件,如果该文件存在,则清空它的数据。

CFile::modeNoTruncate    与CFile::modeCreate 组合使用。如果文件不存在,则创建一个新文件,如果文件存在,则保留他原本的数据。

CFile::modeRead      打开文件用于读取数据。

CFile::modeWrite      打开文件用于写入数据。

CFile::modeReadWrite  打开文件用于读取和写入数据。

CFile::typeBinary      使用二进制文件模式。此模式仅用于CFile的派生类。

CFile::typeText         使用文本文件模式。此模式仅用于CFile的派生类。

 CFile默认使用二进制模式读写文件,CFile无法使用文本模式读写文件。

文件指针的位置设置可以使用

Seek( LONG lOff, UINT nFrom)   把文件指针移动到指定位置

lOff :是指针偏移字节数,若向后偏移则为正数,若向前偏移,则为负数。
nFrom :MSDN上有三种取值:
 CFile::begin  从文件开头开始算起,lOff为正数;
 CFile::current  当前位置开始算起;
 CFile::end     从文件结尾开始算起,lOff为负数;

 

SeekToBegin( )      把文件指针移到文件开头
SeekToEnd( )          把文件指针移到文件末尾

GetPosition( )        返回当前文件指针的位置

获取文件的字节数可用 GetLength( )  此函数的返回值为DWORD,但可直接用来分配数组元素数目,例如:

DOWRD len=file.GetLength();

char *pBuf=new char[len+1]   / int *pBuf=new int[len/4]

char占一个字节,int占四个字节。

 

写入文件:

CFile file;

file.Open("E:\\VC\\1.txt",CFile::modeCreate|CFile::modeWrite|CFile::modeNoTruncate,NULL);

file.Write("HelloWorld",strlen("HelloWorld"));  

 //Write( const void* lpBuf, UINTnCountlpBuf是写入数据的Buf指针,nCount是Buf里需要写入文件的字节数

file.close( );

读取文件:

CFile file;

file.Open("E:\\VC\\1.txt",CFile::modeRead,NULL); 

DWORD len=file.GetLength( );

char Buf[len+1];

Buf[len]=0;  //0终止字符串,用于输出。

file.Read(Buf,len);   //Read( void*lpBuf, UINTnCount) lpBuf是用于接收读取到的数据的Buf指针nCount是从文件读取的字节数

MessageBox(Buf);


注意文本模式与二进制模式的数据写入和读取有明显区别。当用文本模式写入文件时,一旦遇到“换行”字符(ASKII码为10),则转换为“回车-换行”(连续的ASKII码为13,10)写入,当用文本模式读取文件时,一旦遇到“回车-换行”的组合(连续的ASKII码为13,10),则转换为换行字符(ASKII码为10)来读取(实际的换行操作)。若只遇到单一的换行字符或单一的回车字符,都只会显示一个小黑块。

MessageBox中换行只需要一个\n(换行字符)或一个\r(回车字符)就可以了,当遇到\r\n(回车换行字符),结果与一个\n一样。

文本文件中换行一定需要\r\n(回车换行字符),当只遇到一个\n(换行字符),文本不会换行,而会显示一个小黑块。

除了换行字符,其他数据写入文件,无论是用文本模式还是二进制模式,写入的数据都是一样的。同样的,除了回车-换行组合,无论用文本模式还是二进制模式读取文件数据,只要数据一样,读取的结果也一样。