Acá les dejo el source de cómo leer un archivo de texto o binario sin un bucle:
#include <stdio.h>O bien si quieren pasarlo a una función leer que haga todo el trabajo nos quedaría masomenos así:
#include <stdlib.h>
#include <string.h>
//Linkgl.
int main()
{
//variables
FILE *fp;
int dwPeso;
char *szBuffer;
//Abrimos para leer
fp=fopen("hola.exe","rb");
if(fp==NULL)
return -1;
//Obtenemos el peso
fseek(fp,0,SEEK_END);
dwPeso=ftell(fp);
rewind(fp);
//Reservamos un bloque de memoria del tamaño del peso
szBuffer=(char *)malloc(dwPeso);
//Limpiamos nuestro buffer
memset(szBuffer,0,dwPeso);
//Leemos el archivo completo
fread(szBuffer,dwPeso,sizeof(char),fp);
//cerramos
fclose(fp);
getchar();
return 0;
//Compilado con mingw en Dev Cpp
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *Leer(char *archivo);
//Linkgl.
int main()
{
printf("%s",Leer("hola.txt"));
getchar();
return 0;
//Compilado con mingw en Dev Cpp
}
char *Leer(char *archivo)
{
//variables
FILE *fp;
int dwPeso;
char *szBuffer;
//Abrimos para leer
fp=fopen(archivo,"rb");
if(fp==NULL)
return -1;
//Obtenemos el peso
fseek(fp,0,SEEK_END);
dwPeso=ftell(fp);
rewind(fp);
//Reservamos un bloque de memoria del tamaño del peso
szBuffer=(char *)malloc(dwPeso);
//Limpiamos nuestro buffer
memset(szBuffer,0,dwPeso);
//Leemos el archivo completo
fread(szBuffer,dwPeso,sizeof(char),fp);
//cerramos
fclose(fp);
//retornamos el buffer
return szBuffer;
}
Si bien es más recomendable usarla como lineal (es decir sin hacer la función) por que tienes más flexibilidad de usar los resultados obtenidos en palabras que entendamos todos, si no lo usas como función puedes usar despues la variable peso, y los punteros tipo FILE, bueno una cosa más, si lees un binario (.exe) y luego lo quieres mostrar en modo consola con printf("%s",szBuffer); Sólo te mostrará MZ, porque printf es una función que se corta con los caracteres nulos también pero esto no significa que no esté todo el archivo almacenado en szBuffer, prueba escribiendo el archivo en otro nuevo y verás que se copiará perfectamente porque están todos los bytes en el buffer!
No hay comentarios:
Publicar un comentario