| Ver tema anterior :: Ver siguiente tema |
| Autor | Mensaje |
|---|
vicentrp
Registrado: 14 Feb 2007 Mensajes: 25
| Publicado: 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
| Publicado: 23/08/2007 10:02 am | | | Título: |
| | Mírate la función fread() |
|
| Volver arriba | |
 |
spesmod
Registrado: 23 Ago 2007 Mensajes: 33
| Publicado: 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
| Publicado: 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
| Publicado: 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
| Publicado: 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
porque lo comparas con -1 espero que me ayudes en eso por favor Saludos |
|
| Volver arriba | |
 |
|
v4r3t
Registrado: 06 Mar 2007 Mensajes: 38
| Publicado: 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
| Publicado: 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ó: | 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
| Publicado: 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
| Publicado: 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.  |
|
| Volver arriba | |
 |
vicentrp
Registrado: 14 Feb 2007 Mensajes: 25
| Publicado: 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 | |
 |
|
|