C C一次将整个文件读入内存.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C C一次将整个文件读入内存

C、 C++一次将整个文件读入内存1.问题描述: ?? ? ? ?C和C++的初学者经常采用一行一行读入文件的办法对文件数据进行处理。但是经常会有一些情况需要将一个文件整体一次读入内存处理。而C和C++库中并没有提供直接一次读入文件全部数据的函数。 @2.解决方法: ?? ? ? ?目前给出C和C++的解决方案,下面两个程序只是用于演示,不过这些代码已经很容易改写成想要的函数了。 ?? ? ? ?解决这个问题的思路是: ?? ? ? ?1.由于要将文件完整读入,所以必须使用二进制方式打开(若文本方式打开,文件流中会把一些非字符的数据过滤掉,我们将读取不到那些内容)。 ?? ? ? ?2.打开文件后,我们首先获取文件的大小,然后在内存中分配足够的空间,再把文件拷贝到内存空间中。之后使用内存空间进行数据处理,演示程序中没有真正的处理,我们只是简单将其输出。 @3.代码: C实现 [cpp]?view plaincopy #include?stdio.h?? #include?stdlib.h?? ?? int?main?()?? {?? ????FILE?*?pFile;?? ????long?lSize;?? ????char?*?buffer;?? ????size_t?result;?? ?????? ????/*?若要一个byte不漏地读入整个文件,只能采用二进制方式打开?*/??? ????pFile?=?fopen?(test.txt,?rb?);?? ????if?(pFile==NULL)?? ????{?? ????????fputs?(File?error,stderr);?? ????????exit?(1);?? ????}?? ?? ????/*?获取文件大小?*/?? ????fseek?(pFile?,?0?,?SEEK_END);?? ????lSize?=?ftell?(pFile);?? ????rewind?(pFile);?? ?? ????/*?分配内存存储整个文件?*/??? ????buffer?=?(char*)?malloc?(sizeof(char)*lSize);?? ????if?(buffer?==?NULL)?? ????{?? ????????fputs?(Memory?error,stderr);??? ????????exit?(2);?? ????}?? ?? ????/*?将文件拷贝到buffer中?*/?? ????result?=?fread?(buffer,1,lSize,pFile);?? ????if?(result?!=?lSize)?? ????{?? ????????fputs?(Reading?error,stderr);?? ????????exit?(3);?? ????}?? ????/*?现在整个文件已经在buffer中,可由标准输出打印内容?*/?? ????printf(%s,?buffer);??? ?? ????/*?结束演示,关闭文件并释放内存?*/?? ????fclose?(pFile);?? ????free?(buffer);?? ????return?0;?? }?? C++实现 [cpp]?view plaincopy #include?iostream?? #include?fstream?? using?namespace?std;?? ?? int?main?()?{?? ??filebuf?*pbuf;?? ??ifstream?filestr;?? ??long?size;?? ??char?*?buffer;?? ??//?要读入整个文件,必须采用二进制打开??? ??filestr.open?(test.txt,?ios::binary);?? ??//?获取filestr对应buffer对象的指针??? ??pbuf=filestr.rdbuf();?? ???? ??//?调用buffer对象方法获取文件大小?? ??size=pbuf-pubseekoff?(0,ios::end,ios::in);?? ??pbuf-pubseekpos?(0,ios::in);?? ????? ??//?分配内存空间?? ??buffer=new?char[size];?? ????? ??//?获取文件内容?? ??pbuf-sgetn?(buffer,size);?? ???? ??filestr.close();?? ??//?输出到标准输出?? ??cout.write?(buffer,size);?? ???? ??delete?[]buffer;?? ??return?0;?? }?? @4

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档