Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-03-2008
tamarinda tamarinda is offline
Registrado
 
Registrado: mar 2008
Posts: 4
Poder: 0
tamarinda Va por buen camino
Exclamation Modificar registro en archivo binario

Holas foreros!

Estoy trabajando con archivos binarios. olicia:

Uno de los requermientos que tengo, es modificar un registro, por ejemplo, cambiandole la ubicacion (coordenadas x e y).

Para esto, recorro el archivo y al encontrar el registro que deseo modificar, ubico (fseek) el apuntador del archivo una posicion antes, y escribo el nuevo registro.
El problema basicamente es que no escribe los cambios en el archivo. He hecho corridas por trazas aproximadamente unas mil veces :'( y hace todo como si lo estuviera escribiendo, pero al confirmarlo en otra funcion, veo que no lo hace.

Espero entonces puedan revisar el codigo a continuacion, a ver si encuentran algun error.. paranormal!

Código:
//MODIFICAR: modifica una estacion
void estaciones::modificar(struct_estacion esta_actual)
{
        //abro archivo binario "ORIGINAL"
        FILE *ap_b=NULL;
        ap_b=fopen("estacion_b.dat","rb");
        if (ap_b!=NULL)
        {
                struct_estacion tmp;
                int xx, num_reg, cont;

                fseek(ap_b,0,SEEK_END);
                xx=ftell(ap_b);
                num_reg=xx/(sizeof(struct_estacion));

                //leer del archivo y comparar
                for (cont=0;cont<=num_reg;cont++)
                {
                        fseek(ap_b,cont*sizeof(struct_estacion),SEEK_SET);
                        fread(&tmp,sizeof(struct_estacion),1,ap_b);
                        int comparacion_cad;
                        comparacion_cad=strcmp(tmp.nombre,esta_actual.nombre);
                        //si tiene el mismo nombre
                        if (comparacion_cad==0)
                        {
                                fseek(ap_b,(-1)*sizeof(struct_estacion),SEEK_CUR);
                                fwrite(&esta_actual,sizeof(struct_estacion),1,ap_b);
                                fclose(ap_b);
                                break;
                        }
                }
                fclose(ap_b);
        }
};

Esperando su respuesta! :-) Gracias de antemano :-)
Responder Con Cita
  #2  
Antiguo 06-03-2008
Antonioveneroso Antonioveneroso is offline
Miembro
 
Registrado: feb 2008
Posts: 30
Poder: 0
Antonioveneroso Va por buen camino
Hace mucho que no trabajo con archivos binarios, pero tienes esta linea
Cita:
ap_b=fopen("estacion_b.dat","rb");
estás diciendo que abra estacion_b.dat como lectura, al menos eso creo... y no puedes escribir en un archivo de lectura, ¿o sí?
Espero haber servido de ayuda.
Saludos y suerte!
Responder Con Cita
  #3  
Antiguo 06-03-2008
tamarinda tamarinda is offline
Registrado
 
Registrado: mar 2008
Posts: 4
Poder: 0
tamarinda Va por buen camino
Dioooooooossss!! que horrorrrr!!

Era eso...
Responder Con Cita
  #4  
Antiguo 06-03-2008
Antonioveneroso Antonioveneroso is offline
Miembro
 
Registrado: feb 2008
Posts: 30
Poder: 0
Antonioveneroso Va por buen camino
Me da gusto haberte podido ayudar!
Cualquier otra cosa, ya sabes, por aquí estamos.
Saludos y suerte!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Bloquear registro en fichero binario jonmendi API de Windows 3 13-11-2007 17:16:31
Cargar array of char de un archivo binario JosepZ Varios 9 12-11-2007 23:28:16
Modificar registro Elite237 OOP 4 03-08-2007 04:27:21
Registro con valor BINARIO !!! Ledian_Fdez Varios 1 07-06-2007 00:25:58
modificar olo un registro Irina SQL 1 26-05-2003 13:41:59


La franja horaria es GMT +2. Ahora son las 13:34:08.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi