Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Leer archivo binario

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Leer archivo binario Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Muchas Gracias Leo.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.