/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Lectura de un archivo binario

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
vicentrp



Registrado: 14 Feb 2007
Mensajes: 25

MensajePublicado: 23/08/2007 8:48 am
Título: Lectura de un archivo binario

Buenas a todos quiero saber como puedo leer un archivo binario; y como puedo hacer para escribir los resultados en otro archivo diferente de su misma extension...
espero que me puedan ayudar..
gracias
Vicente
Volver arriba
v4r3t



Registrado: 06 Mar 2007
Mensajes: 38

MensajePublicado: 23/08/2007 10:02 am
Título:

Mírate la función fread()
Volver arriba
spesmod



Registrado: 23 Ago 2007
Mensajes: 33

MensajePublicado: 23/08/2007 10:29 am
Título: exactamente q quieres????

hola que tal soy nuevo en el foro pero no en el C y tal vez pueda ayudarte pero no se que es exactamente lo que quieres, osea hasta donde entiendo quieres leer un archivo y copiar su contenido en otro fichero???, pero para copiar el contenido de un fichero no necesitas leerlo, imaginate si fuera una imagen (.bmp) sabes cuantos caracteres tendrias que leer visualmente???.
especificate bien, quieres un prog q te pida el nombre de 2 ficheros 1 real (existente) y otro que va a crear (todaia no existe hasta ese momento) luego q t permita ver el contenido del primero y que a la vez lo duplique con el nombre del segundo??? o solamente que pida 2 ficheros y que duplike al primero con el nombre del segundo (sin ver el contenido de ambos)
_________________
|--A--Q--U--A--|
Volver arriba
vicentrp



Registrado: 14 Feb 2007
Mensajes: 25

MensajePublicado: 23/08/2007 10:55 am
Título:

lo que nesecito es un programa para leer un archivo que tiene datos en codigo binario...
los comandos para leer y tambien para escribir ..
tambien crear un nuevo archivo y colocar mis resultados ahi..
Volver arriba
daltomi



Registrado: 28 Abr 2007
Mensajes: 114
Ubicación: Argentina

MensajePublicado: 23/08/2007 4:51 pm
Título:

Muchas formas existen de leer un archivo y esto depende del uso que se dará a la info del mismo. Yo quisiera mostrarte como se leeria un archivo en modo binario utilizando fread y además, en vez de leer una y otra vez línea por línea, o caracter por caracter, vamos a leer todo el contenido de una vez, almacenando los datos en memoria, asignada previamente, según el tamaño(en bytes) del archivo.

Código:

FILE* fp; //controlador de archivo.
char* lpData; //datos
long lSize = 0; //tamaño

// abrimos modo binario
fp = fopen("arch.bin","rb");
if(fp==-1)
{
   return 0;
}
//posición al final.
fseek(fp,0,SEEK_END);

//tamaño del archivo en bytes
lSize = ftell(fp);
   
//posición al inicio
rewind(fp);

//si arch. vacío salimos
if(lSize <= 0)
{
   fclose(fp);
   return 0;
}

//asignación memoria dinámica.
lpData = new char[(lSize + 1)];

   
//Signo NULL al final.
//Opcional pero recomendado en la práctica.
lpData[lSize] = '\0';

//Lectura del archivo.
fread(lpData,1,lSize,fp);

//cierre de controlador.
fclose(fp);
/*
 Aqui la escritura/volcado de los datos al nuevo archivo.
*/

//liberación.
delete[] lpData;

//Signo NULL al puntero
//Opcional pero recomendado en la práctica.
lpData = NULL;


Volcar los datos que se encuentran en lpData a otro archivo, es más facil todavía.:
1.- Crear archivo nuevo.
2.- Escribir/volcar los datos al archivo.
3.- Cerrar archivo.
Saludos.
Volver arriba
vicentrp



Registrado: 14 Feb 2007
Mensajes: 25

MensajePublicado: 24/08/2007 8:34 am
Título: algunas cosas que no comprendo

Código:
fp = fopen("arch.bin","rb");

que significa el "rb"?

[/code]fread(lpData,1,lSize,fp)[/code]
y aqui q siginifica 1

Código:
if(fp==-1)

porque lo comparas con -1
espero que me ayudes en eso por favor
Saludos
Volver arriba
v4r3t



Registrado: 06 Mar 2007
Mensajes: 38

MensajePublicado: 24/08/2007 8:38 am
Título:

Mírate las funciones fopen y fread aquí
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 3657
Ubicación: Mexico

MensajePublicado: 24/08/2007 9:29 am
Título: Re: algunas cosas que no comprendo

vicentrp escribió:
Código:
fp = fopen("arch.bin","rb");

que significa el "rb"?

"rb" indica que el archivo se abre ("r") en modo binario ("b").

vicentrp escribió:
Código:
fread(lpData,1,lSize,fp)

y aqui q siginifica 1

En realidad el orden de los argumentos esta mal, el 1 se utiliza para indicar que se debe imprimir en el archivo un elemento cuyo tamaño es lSize y que se ubica a partir de la posicion en memoria indicada por "lpData" en el archivo indicado por fp.

El orden correcto de los argumentos debe ser:
Código:
fread(lpData, lSize, 1, fp)

/*
** Ya que el prototipo de fread es
**
** size_t fread(void *src, size_t size, size_t num_elem, FILE *¨stream)
**
*/


vicentrp escribió:
Código:
if(fp==-1)

porque lo comparas con -1

Supongo que es un error ya que la funcion fopen devuelve NULL cuando por alguna razon no puede abrir el archivo, es usual este tipo de comparaciones para verificar que el archivo se abra con exito, por ejemplo:
Código:
/* Apertura del archivo y validacion */
if((fp = fopen("arch.bin", "rb")) == NULL){
   /* Manejo de error */
   perror("arch.bin");
   return EXIT_FAILURE;
}


Como ya te comentaron lo mejor si tienes una duda con alguna de las funciones de la biblioteca estandar de C es revisar alguna de las referencias en linea, enlaces a otras referencias de calidad pero en ingles se encuentran en la seccion "Enlaces" de este sitio.

Un saludo
_________________
The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz


Ultima edición por rir3760 el 24/08/2007 10:30 pm; editado 1 vez
Volver arriba
vicentrp



Registrado: 14 Feb 2007
Mensajes: 25

MensajePublicado: 24/08/2007 11:27 am
Título: ayuda mas clara por favor..

gracias por todas las ayudas que me han dado hasta el momento.. pero como que todos no han satisfecho mis dudas..
lo que nesecito es un programa que me habra un archivo "imagen.raw" que tiene datos binarios;
quiero leerlos y despues discrinar todos los datos menos que 0 y sacar un promedio de todos estos... la verdad esque aun nose como hacerlo...
yo simepre he trabajado con datos Ascii y no me habia interesado los binarios; si me pueden explicar como leer y como escribir en archivos diferentes...
bueno gracias por todo...
saludos
vicente
Volver arriba
daltomi



Registrado: 28 Abr 2007
Mensajes: 114
Ubicación: Argentina

MensajePublicado: 24/08/2007 4:04 pm
Título:

Si, me equivoqué en comparar el valor de retorno de fopen con -1, pero con respecto a fread no estoy de acuerdo, para la "funcionalidad" que le di a dicha función: "leer todo el cotenido del archivo".
Un ejemplo parecido que se encuentra en la Win32 Developer's Reference:
Código:

// Read key blob length from file and allocate memory.
fread(&dwBlobLen, sizeof(DWORD), 1, hSourceFile);

pbKeyBlob = malloc(dwBlobLen);

// Read key blob from file.
fread(pbKeyBlob, 1, dwBlobLen, hSourceFile);

El primer fread vemos que se necesita tomar los datos de un archivo de tamaño sizeof(DWORD) y la cantidad de elementos es 1, es decir un registro que representa la "cantidad" de bytes que le subsiguen al mismo.
El segundo fread vemos que toman los datos del archivo de tamaño 1 y la cantidad de elementos dwBlobLen.

Debo aclarar que desarrollo con Visual C++ y utilizo generalmente CreateFile de la api win32, pero por portabilidad(?) hacia otras plataformas me recomiendadn que utilice fopen, asi que bueno me parece que tendré que resolver este tema de fread.

Saludos. Smile
Volver arriba
vicentrp



Registrado: 14 Feb 2007
Mensajes: 25

MensajePublicado: 04/09/2007 9:24 am
Título: en busca de programa

bueno sere mas explicito.. lo que nesecito es un programa que lea el archivo "imagen.raw" este archivo es una imagen.. y como imagen esta en codigo binario.. despues de leer quiero sacarle un promedio a todos los pixeles que sean positivos o ceros y el resto descartarlo...
espero que puedan ayudar
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com