zoukankan      html  css  js  c++  java
  • C/C++读写二进制文件

    C++读写二进制文件

     最近在给android层提供支持,因此代码都是用标准库库函数写出来的,好多windows和第三方的库不能或者很难使用,下面有我在读写二进制文件时候的一些心得,也算是一种总结吧
        1、读二进制信息

     1   bool bRet = true; 
     2     std::ofstream fout(szDestFile, std::ios::binary | std::ios::app); 
     3     std::ifstream fin(szOrigFile, std::ios::binary); 
     4  
     5     if (fin.bad()) 
     6     { 
     7         bRet = false; 
     8     } 
     9     else 
    10     { 
    11         while(!fin.eof()) 
    12         { 
    13             char szBuf[256] = {0}; 
    14              
    15             fin.read(szBuf, sizeof(char) * 256); 
    16              
    17             if (fout.bad()) 
    18             { 
    19                 bRet = false; 
    20                 break; 
    21             } 
    22  
    23             //  
    24             fout.write(szBuf, sizeof(char) * 256); 
    25         } 
    26     } 
    27  
    28     fin.close(); 
    29     fout.close(); 
    View Code

        这种方式读写二进制信息适用于读取一些二进制结构信息,如果读取像图片这样的二进制文件时,特别不方便,那么久需要一次性的读取文件的所有内容。


    C、C++一次将整个文件读入内存

    C++实现方式:测试通过

     1 filebuf *pbuf; 
     2   ifstream filestr; 
     3   long size; 
     4   char * buffer; 
     5   // 要读入整个文件,必须采用二进制打开  
     6   filestr.open ("test.txt", ios::binary); 
     7   // 获取filestr对应buffer对象的指针  
     8   pbuf=filestr.rdbuf(); 
     9    
    10   // 调用buffer对象方法获取文件大小 
    11   size=pbuf->pubseekoff (0,ios::end,ios::in); 
    12   pbuf->pubseekpos (0,ios::in); 
    13     
    14   // 分配内存空间 
    15   buffer=new char[size]; 
    16     
    17   // 获取文件内容 
    18   pbuf->sgetn (buffer,size); 
    19    
    20   filestr.close(); 
    21   // 输出到标准输出 
    22   cout.write (buffer,size); 
    23    
    24   delete []buffer; 
    25 
    26 C方式:
    27     FILE * pFile; 
    28     long lSize; 
    29     char * buffer; 
    30     size_t result; 
    31      
    32       
    33     pFile = fopen ("test.txt", "rb" ); 
    34     if (pFile==NULL) 
    35     { 
    36         fputs ("File error",stderr); 
    37         exit (1); 
    38     } 
    39  
    40      
    41     fseek (pFile , 0 , SEEK_END); 
    42     lSize = ftell (pFile); 
    43     rewind (pFile); 
    44  
    45       
    46     buffer = (char*) malloc (sizeof(char)*lSize); 
    47     if (buffer == NULL) 
    48     { 
    49         fputs ("Memory error",stderr);  
    50         exit (2); 
    51     } 
    52  
    53      
    54     result = fread (buffer,1,lSize,pFile); 
    55     if (result != lSize) 
    56     { 
    57         fputs ("Reading error",stderr); 
    58         exit (3); 
    59     } 
    60      
    61     printf("%s", buffer);  
    62  
    63      
    64     fclose (pFile); 
    65     free (buffer); 
    View Code
    如果您觉得文章不错,不妨给个打赏,写作不易,感谢各位的支持。您的支持是我最大的动力,谢谢!!! 

     

      


    很重要--转载声明

    1. 本站文章无特别说明,皆为原创,版权所有,转载时请用链接的方式,给出原文出处。同时写上原作者:朝十晚八 or Twowords
    2. 如要转载,请原文转载,如在转载时修改本文,请事先告知,谢绝在转载时通过修改本文达到有利于转载者的目的。 

  • 相关阅读:
    12: xlrd 处理Excel文件
    11: python中的轻量级定时任务调度库:schedule
    03:git常见报错解决方法
    02: git分支管理
    01:jQuery的下拉选select2插件用法
    03: pip使用
    virsh 命令行管理虚拟机
    给新建的kvm虚拟机创建网络接口
    使用 virt-install 创建虚拟机
    使用字符界面 qemu-kvm 创建虚拟机
  • 原文地址:https://www.cnblogs.com/swarmbees/p/5621586.html
Copyright © 2011-2022 走看看