C++怎样消耗最小内存读大文件(存放在CString中)
需求:读一个大小为300兆的文件,并将内容放在CString类型的变量buff中。
前述:FioFile.Open( filename, CFile::modeRead|CFile::shareDenyWrite , &Error ) 打开文件
方案1:
CString temp;
while(FioFile.ReadString(temp))
{
buff = buff + temp;
}
这个方法只需要消耗300兆的内存,但是文件太大时太耗时间(二十多兆的文件估计就得读好几个小时),所以该方案丢弃
方案2:
char*allstr=(char *)((void *)new char[300 * 1024 * 1024]);
while(FioFile.ReadString(temp))
{
strcpy( allstr + idx, temp.GetBuffer( temp.GetLength() ));
temp.ReleaseBuffer();
}
buff = allstr ;
但是在最后一步“buff = allstr;”时,需要消耗两个连续的300M的空间,也就是600兆的空间,如果不存在连续的两个300兆的空间,则会出现内存不足的情况,舍弃
方案3:
结合方案1和2,开辟50兆大小的char*,每次读取50兆,拼接在buff上,但是拼接到最后一次250兆时,如果这时CString的空间不是一个大于300兆的连续空间,那么系统会重新找一个有300兆的连续空间,那么消耗的内存情况就是50兆的char*空间+250兆的连续空间+300兆的连续空间,没有这些连续空间,也会报出内存不足。
请教一下,怎么样才能只消耗最小的空间读取文件?
我本来的想法是,使用方案三,最开始就给buff开辟一个300兆的空间,但是没找到给CString类型指定空间大小的方法