Ver Mensaje Individual
  #3  
Antiguo 01-02-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Reputación: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
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.
Responder Con Cita