Es mejor que leer char a char (o byte a byte) un buffer intermedio y leer grandes porciones del archivo.
Un Array de chars muy grande no lo puedes reservar dentro de una función como char buffer[700000000], pues esa reserva se hace en la pila y la consume. En una variable global quizás, pero lo mejor es, tratándose de C++:
char* buffer = new char[700000000];
Las funciones malloc y calloc también sirven. En todos estos casos sizeof(buffer) no devuelve 700000000 sino 4 con lo que la lectura tal y como la planteas, lee 4 bytes.
Para leer y escribir ficheros, C++ dispone de las clases stream: ifstream y ofstream que disponen de un buffer intermedio gestionado por ellas mismas.
La idea del String no sirve en este caso porque se pretende leer un archivo binario y no de texto, y el tratamiento de los retornos de carro y línea corrompen el resultado.
Sin embargo el uso de un TMemoryStream si es otra buena solución, claro que eso no es C++ estándar sino la VCL.
Saludos.
|