C/C++读写二进制文件

Posted 朝十晚八

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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. 如要转载,请原文转载,如在转载时修改本文,请事先告知,谢绝在转载时通过修改本文达到有利于转载者的目的。 

以上是关于C/C++读写二进制文件的主要内容,如果未能解决你的问题,请参考以下文章

C/C++经典面试题(转载)

C语言 文件读写 fseek 函数

C语言 文件读写 ftell 函数

[转载]python:open/文件操作

java web开发(反射)

java web开发(反射)