zoukankan      html  css  js  c++  java
  • 关于文件的读取和保存(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();        //关闭文件
    
    

    }

  • 相关阅读:
    Git-本地项目和远程项目关联
    P1-Linux下安装MySQL及登录用户配置
    P2-Centos中安装vsftpd
    ElasticSearch安装及HEAD插件配置
    ArrayList源码分析
    Maven的继承以及import作用域
    单例模式浅析
    Vim快捷键记录(工作中遇到)
    OSX下 pip更新及安装python库
    统计工具之QQ图
  • 原文地址:https://www.cnblogs.com/sunliming/p/1893580.html
Copyright © 2011-2022 走看看