C++如何读取较大二进制文件?

来源:百度知道 编辑:UC知道 时间:2024/09/28 09:29:31
C++如何读取较大二进制文件?
源码

#include "stdafx.h";
#include <iostream>
#include <fstream>
using namespace std;

void main()
{

char name[104857];
ifstream in("D:\\my.txt",ios::binary|ios::in);
if(!in)
{
exit(1);
}
in>>name;
cout<<name<<endl;
}
如果把NAME数组写太大的话会异常终止(遇到问题需要关闭)
如何解决?不要再写个函数分割了再传入
我想读的是二进制文件。。

数组太大不宜使用静态的堆栈变量,32位Visual C++编译器默认堆栈只有1兆,定义一个大数组很容易就溢出。

这种情况下,可以使用动态内存分配(char* name = new char[123456789])。

再大的二进制文件实在没有必要一次读入内存,如果需要就是程序设计有问题,没有扩展性。

如果是在Windows上,可以利用Windows自身的虚拟内存管理功能,使用内存影射文件(CreateFileMapping, MapViewOfFile)。

另外,二进制数据用cout打印不太好吧。

char name[104857];改成string name;
加个<string>头文件

嘿嘿,用vector装吧~
#include <vector>

然后
char name[104857];
换成这样
vector<char> name;
加入一个临时变量
char temp;
in>>name;
换成
while(!in.eof())
{
in>>temp;
name.push_back(temp);
}
最后cout的时候,也一个个输出了~(注意,大量的cin cout的时候,建议还是用scanf()和printf(),个别拼写可能有误,仅供参考大意)

一次都读出来肯定是太大了,你可以用按需读取的方法。
计算一下能显示哪部分,就读哪部分,剩下的忽略掉就可以了。

具体实现可以参照一下VirtualStringTree这个控件,很好的例子