Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Leer byte a byte un fichero binario (https://www.clubdelphi.com/foros/showthread.php?t=78133)

NPIdea 22-03-2012 12:19:09

Leer byte a byte un fichero binario
 
Hola a todos.

Estoy con la lectura de un fichero binario y resulta que según en que caracteres tenga en su interior me lee más o menos caracteres y eso que con un editor hexadecimal los datos están correctamente en su sitio. Pero debe ignorar algúnos caracteres como h20 h13 y no me los lee, con lo que el array que quiero cargar, me fastidia todos los indices.

La función que uso es:
Código Delphi [-]
    i=0;
//    AnsiString RD=ExtractFilePath(Application->ExeName)+"Tablas\\R230.PGZ";
    AnsiString RD=ExtractFilePath(Application->ExeName)+"Tablas\\Prueba.PGZ";
    FILE *pf=fopen(RD.c_str(),"r");
    if (pf!=NULL)
    {
      fseek(pf, 0, 0);
      fseek(pf, 0, 0);
      fread(&RegDoc, sizeof(RegDoc), 1, pf);
      fclose(pf);
    }

Si cojo el segundo funciona bien y en el 5750 sale el dato que quiero, si uso el primero sale en el 5748.

Se me ocurre leer byte a byte el fichero, pero ese es mi problema, no se como hacerlo para meterlo luego en un array.

El array es de 8749, la misma longitud del fichero binario.

Gracias.

PD: El problema es que me descarta los bytes que estan con h0D (CR decimal 13) y no me los mete en la cadena.

NPIdea 22-03-2012 13:04:32

Solucionado
 
Mira que he mirado páginas, foros, etc.

Al final estaba en la ayuda de Buider, jeje.

hay que cambiar el setmode, con lo que quedaría así:

añardir io.h y fontl.h ademas de string.h y stdio.h.

Código Delphi [-]
    AnsiString RD=ExtractFilePath(Application->ExeName)+"Archivo.ppp";
    FILE *pf=fopen(RD.c_str(),"r");
    setmode( fileno( pf ), O_BINARY );
    if (pf!=NULL)
    {
      fseek(pf, 0, 0);
      fread(&RegDoc, sizeof(RegDoc), 1, pf);
      fclose(pf);
    }

Y solucionado.

escafandra 22-03-2012 16:36:34

Tambien tienes esta opción mas directa:
Código:

FILE *pf=fopen(RD.c_str(),"rb");

Saludos.


La franja horaria es GMT +2. Ahora son las 14:25:20.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi