• Martes 2 de Julio de 2024, 15:58

Autor Tema:  Modificacion De Ficheros Binarios  (Leído 1220 veces)

un_nota

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Modificacion De Ficheros Binarios
« en: Martes 24 de Agosto de 2004, 13:28 »
0
Necesito q alguien me diga como modificar ficheros binarios utilizando otro fichero auxiliar.Es urgente,necesito saberlo,mi futuro depende de esto y nadie me ayuda :( .
Os esplico en q consiste mi problema.Esstoy haciendo un proyecto sobre una clinica medica,en la cual tengo q hacer una actualizaccion,gestion,consulta y listado de ficheros.
las consultas y listados es facily la gestion tengo algo de listas para realizarlo.
Mi problema esta en la parte de actualizacciones.se hacer las altas y las bajas,pero no tengo ni idea de hacre las modificaciones.
Para hacerlas tengo q pedir un numero al usuario,q es el numero del medico,el codigo del paciente o el numero de especialidad.luego tengo q verificar q existen en el fichero y despues pregunto si desean modificar algun apartado,si es asi se modifica.el problema viene cuando voy a guardar los cambios.
Yo uso 2 ficheros 1 q es el original llamado medicos.dat y otro q es el medicos2.dat
q acttua como auxiliar.el primero lo abro en modo lectura solo "rb" y el segundo en escritura "wb". pues no se q hago al grabar los registros de un fichero a otro q me genera un archivo "MEDICOS2.dat" de 4 gb :o .Os pongo el codigo q uso.

este es el codigo
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

kennethsleiker

  • Miembro activo
  • **
  • Mensajes: 25
  • Nacionalidad: do
    • Ver Perfil
    • http://cybersotano.netii.net
Re: Modificacion De Ficheros Binarios
« Respuesta #1 en: Jueves 26 de Agosto de 2004, 03:45 »
0
No soy un profesional en esto de lenguaje C, apenas lo estoy estudiando.

Estube revisando tu codigo fuente y note a simple vista que las lineas 314 y 315 deberian estar entre llaves ya que son la sucecion de un "else", sospecho que la linea 315 al no estar contenida adecuadamente dentro de la condicion else este escribiendo de mas en el archivo auxiliar;  como puedes ver dicha linea es un fwrite().

Algo que tampoco entendi bien en tu codigo es sobre la linea 314, donde dices:
fseek( pfMedicos, -grandaria, SEEK_CUR );

La pregunta es por que la variable grandaria esta precedida por el signo " - " (menos)?

Mi MSN es kennethsleiker@hotmail.com

[BlueDolph]

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Modificacion De Ficheros Binarios
« Respuesta #2 en: Sábado 4 de Septiembre de 2004, 04:55 »
0
Hola... mira... estuve mirando tu codigo... y aunque lo vi muy por arriba te digo lo que me parecio, si?

Primero... hay un problemita si no me equivoco cuando preguntas si desea realizar algun cambio mas. Es decir... preguntas si desea realizar otro cambio antes de grabar ese cambio que hizo, loq ue hace que pierdas el cambio anterior ya que por lo que vi vos los cambios los guardas en variables y cada vez que pidas un cambio pisa el valor que tenia la variable anteriormente. Si vas a darle la posibilidad a la persona de que eliga si hacer algun cambio mas o no hacelo... pero no pidas el cambio siguiente hasta haber guardado el que ya tenes... sino solo te va a quedar el ultimo cambio...

Y despues, el problema de los 4 GB para mi esta aca...
Código: Text
  1.  
  2. fread(&cambio,grandaria,1,pfMedicos);
  3. while((!ferror(pfMedicos)) && (!feof(pfMedicos)) && (!ferror(pf2)))
  4. {
  5.    if(num!=cambio.num_col)
  6.          fwrite(&cambio,grandaria,1,pf2);//escribo el registro en el fichero nuevo
  7.    else
  8.          fseek(pfMedicos,-grandaria,SEEK_CUR);
  9.    fwrite(&cambio,grandaria,1,pf2);
  10. }
  11. fread(&cambio,grandaria,1,pfMedicos);
  12.  
  13.  

El error esta en que el segundo fread() esta afuera del while! entonces no seguis leyendo del archivo original... y lo unico que haces es escribir reiteradamente el mismo registro en el archivo nuevo... es decir... estas generando 4 GB o mas con el primer registro escrito muchas veces...

Bueno... no probe los cambios y el codigo lo vi por arriba..espero que sea eso y te sirva la ayuda..

Saludos..
[BlueDolph]