| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
neg1414 Master

Registrado: 31 Ene 2007Mensajes: 284
|
Publicado: Sab 30 Ene, 2010 7:10 pm Asunto: Leer archivo binario |
|
|
Buenas...
Tengo un archivo binario en el que he guardado un numero muy grande de chars (unos 70000000).
Al recuperar los datos del archivo, si lo hago char a char me consume una gran cantidad de tiempo por el acceso a disco.
Para ahorrar tiempo he pensado acceder a disco la menor cantidad de veces posible (Una vez la ideal). para ello pense crear una variable arreglo de chars lo mas grande posible.El arreglo mas grande de Chars que creo que se puede establecer, no es ni por asomo la cantidad necesaria para leerlo de una vez,de todas formas he reducido el numero de accesos a disco y con el el tiempo de ejecucion.
He intentado hacer un arreglo de chars de la forma
| Código: |
char *buffer;
buffer = (char*)malloc(sizeof(char)*700000000);
Archivo.read((char *)(&buffer),sizeof(buffer));
for (unsigned int a=1;a<700000000;)
{
char dat = buffer[a];
}
|
La lectura no da problemas pero en cuanto asigno el primer char de buffer a dat me da error.
¿Que hago mal?..¿Es posible leer el archivo de una vez?
Gracias. |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Sab 30 Ene, 2010 8:56 pm Asunto: |
|
|
Tu fallo esta en el "sizeof(buffer)" que devolverá en este caso el tamaño de un puntero (o sea 4).
Aquí tienes otra manera de leer el archivo completo:
| Código: | ifstream Archivo("d:\\prueba.bin", ios::in | ios::binary | ios::ate);
if (Archivo.is_open())
{
ifstream::pos_type size = Archivo.tellg();
char* buffer = new char[size];
Archivo.seekg(0, ios::beg);
Archivo.read(buffer, size);
Archivo.close();
// Aquí tenemos el archivo completo en "buffer"
// for (int i = 0; i < size; ++i) { char dat = buffer[i]; }
ShowMessage("completo..");
delete[] buffer;
} |
|
|
| Volver arriba |
|
 |
neg1414 Master

Registrado: 31 Ene 2007Mensajes: 284
|
Publicado: Sab 30 Ene, 2010 9:57 pm Asunto: |
|
|
| Muchas Gracias Leo. |
|
| Volver arriba |
|
 |
|