Aquí tienes un ejemplo de como abrir, un fichero binario, y yo no he tenido problemas, con la longitud de fichero. Lo que habo es abrirlo de forma binaria, y me da lo mismo si lo de dentro es binario, texto o lo que sea.Lo que debes hacer luego, es tratar el caracter como tu desees.
Lo que hace el código, es abre un fichero, en este caso de texto, y lo recorre hasta el final, y lo guardo todo en Numero. Una vez hecho esto, calculo su longitud, le añado un retorno de carro y cierro el fichero ya que la información la tengo en el puntero.
Por último, vas movimiendote caracter a caracter, hasta donde quieras. Espero que te sirva, no obtante, si quieres más información, ponme un e-mail.
luisignacio.martin@teleinformatica-sa.es
#define _cr 13
char *Codigo_Fuente,*Numero;
long Longitud_Codigo_Fuente;
AnsiString borrar1="c:\\aenviar\\ejemplo.txt";
if ((fichero=fopen((borrar1).c_str(),"rb"))==NULL)
{Application->MessageBox(
"¿Fallo al abrir el fichero ejemplo.txt)?",
"CLIENTE", MB_YESNOCANCEL);
}
fseek(fichero,0,SEEK_END);
Longitud_Codigo_Fuente=ftell(fichero);
if ((Codigo_Fuente=(char *)malloc(Longitud_Codigo_Fuente+1))==NULL)
{
}
fseek(fichero,0,SEEK_SET);
Longitud_Codigo_Fuente=fread(Codigo_Fuente,1,Longitud_Codigo_Fuente,fichero);
fclose(fichero);
*(Codigo_Fuente+Longitud_Codigo_Fuente)=_cr;
Numero=Codigo_Fuente;
while (Numero<Codigo_Fuente+Longitud_Codigo_Fuente)
{
/*Aqui en (*Numero) vas haciendo la transformación a hexadecimal .por ejemplo.
*/
Numero++;
}