关于文件的读取和保存(CFile和CArchive)--vc++

一、使用CFileRead()函数和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();        //关闭文件

}

posted on 2010-12-01 16:13  sunliming  阅读(5691)  评论(0编辑  收藏  举报