CFile 提供了一些常用的操作函数,如表 1-2 所示。
表 1-2 CFile 操作函数 |
|
函数 |
含义 |
Open |
打开文件 |
Close |
关闭文件 |
Flush |
刷新待写的数据 |
Read |
从当前位置读取数据 |
Write |
向当前位置写入数据 |
GetLength |
获取文件的大小 |
Seek |
定位文件指针至指定位置 |
SeekToBegin |
定位文件指针至文件头 |
SeekToEnd |
定位文件指针至文件尾 |
GetFileName |
获取文件名,如: “NOTEPAD.EXE” |
GetFilePath |
获取文件路径,如: “C:/WINDOWS /NOTEPAD.EXE” |
GetFileTitle |
获取文件标题,如: “NOTEPAD” |
GetPosition |
获取当前文件指针 |
GetStatus |
获取当前文件的状态,返回一个 CFileStatus |
#Remove |
静态方法,删除指定文件 |
#Rename |
静态方法,重命名指定文件 |
注意最后两个静态函数,其实它们封装了 Windows API 中关于文件管理的函数。
使用 CFile 操作文件的流程如下:
构造一个 CFile 对象。
调用 CFile::Open() 函数创建、打开指定的文件。
调用 CFile::Read() 和 CFile::Write () 进行文件操作。
调用 CFile::Close() 关闭文件句柄。
文件指针的位置设置可以使用 :
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 , UINT nCount ) lpBuf 是写入数据的 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 , UINT nCount ) lpBuf 是用于接收读取到的数据的 Buf 指针 nCount 是从文件读取的字节数
MessageBox(Buf);
void CSCF_SETDlg::OnOK()
{
// TODO: Add extra validation here
CFile file( "D:/Spot.txt ", CFile::modeCreate | CFile::modeWrite);
for(int i=0; i <30; i++)
file.Write( "......... ",strlen( "....... ")); //写的内容,就不赘述了
// if(!file.open( "filename ",CFile::modeCreate|CFile::modeReadWrite|CFile::typeBinary))
//{
//MessageBox("fail");
//}
file.Close();
//CDialog::OnOK();
}