最近在给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++实现方式:测试通过
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
如果您觉得文章不错,不妨给个打赏,写作不易,感谢各位的支持。您的支持是我最大的动力,谢谢!!!
很重要--转载声明
- 本站文章无特别说明,皆为原创,版权所有,转载时请用链接的方式,给出原文出处。同时写上原作者:朝十晚八 or Twowords
- 如要转载,请原文转载,如在转载时修改本文,请事先告知,谢绝在转载时通过修改本文达到有利于转载者的目的。
奋斗中的无名小卒。。。原文链接: https://www.cnblogs.com/swarmbees/p/5621586.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/235902
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!