关于文件的读取和保存(CFile和CArchive)--vc++
一、使用CFile的Read()函数和Write()函数读写文件
二、使用CArchive类的Read()和Write()函数进行缓冲读写,
创.建CArchive对象前必须先建CFile对象,CArchive要用到CFile对象.
CArchive对象提供了一个类型安全缓冲机制,用于将可序列化对象写入 CFile 对象或从中读取可序列化对象。通常,CFile 对象表示磁盘文件;但是,它也可以是表示“剪贴板”的内存文件(CSharedFile 对象)。
给定的 CArchive 对象要么存储数据(即写入数据或将数据序列化),要么加载数据(即读取数据或将数据反序列化),但决不能同时进行。CArchive 对象的寿命只限于将对象写入文件或从文件读取对象的一次传递。因此,需要两个连续创建的 CArchive 对象将数据序列化到文件,然后从文件反序列化数据。
将数据序列化到存档时,存档积累数据,直到其缓冲区被填满为止。然后,存档将其缓冲区写入 CArchive 对象指向的 CFile 对象。同样,当您从存档中读取数据时,存档会将数据从文件读取到它的缓冲区,然后从缓冲区读取到反序列化的对象。这种缓冲减少了物理读取硬盘的次数,从而提高了应用程序的性能。
//下面是一个当前目录下的gif图片的读取和另存操作
void Read_Write_Gif()
{
CFile file; file.Open("abc.gif",CFile::modeRead); //打开图像文件 DWORD dwDataLen=file.GetLength(); //获取文件的长度 BYTE *buf=new BYTE[dwDataLen]; //创建数组,用来保存图像的数据 memset(buf,0x00,dwDataLen); //初始化数组 file.ReadHuge(buf,dwDataLen); //图像文件的数据保存在数组中 file.Close(); //关闭文件 CFile tempfile("temp.temp", CFile::modeCreate | CFile::modeWrite);//创建文件temp.temp //(扩展名任意) CArchive ar(&tempfile, CArchive::store); //创建缓冲区 ar.Write(buf,dwDataLen); //向缓冲区内写数据,buf为保存图像数据的数组,dwDataLen //为数组的长度 /*for(int i=0;i<dwDataLen;i++) //也可以用operator<<进行写操作 { ar<<buf[i]; }*/ //tempfile.Write(buf,dwDataLen); //也可以只用CFile::Write进行写操作 ar.Close(); //关闭缓冲区 tempfile.Close(); //关闭文件
}
转载请注明出处,有技术问题,欢迎互相交流,或者留言.