C++一次将整个文件采用二进制方式读入内存

参考:

https://blog.csdn.net/Machey__/article/details/78535956


C++一次将整个文件采用二进制方式读入内存,解决部分文本文件末尾乱码问题。

注意:此方式只能读取文本类的文件,我试过读取winrar,.exe文件都不行。我也没搞懂二进制读为啥不行,我只会C#。

ifstream读取整个文件到内存,存储在char中。

#include 
#include 
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);
   
  // 分配内存空间 +1是关键,不然又些文件会乱码
  buffer=new char[size+1];
   
  // 获取文件内容
  pbuf->sgetn (buffer,size);
  buffer[size]='\0';\\0这是关键
  filestr.close();
  // 输出到标准输出
  cout.write (buffer,size);
  
  delete []buffer;
  return 0;
}

你可能感兴趣的:(C/C++)