[C con Clase] Retroceder el puntero en archivo binario

Carolina Herrera carolinah802 en hotmail.es
Mar Jun 17 04:39:35 CEST 2008


Hola chicos!!!

Hola Luis, esa es la forma en la que normalmente lo hacia, pero la opción que daba Salvador me parecía mucho más sencilla, lastimosamente aún no logro hacer que funcione =(

Si alguien sabe cual es el error que estoy cometiendo, ya lo busqué y probé de varias formas diferentes, pero nada de nada =(

fseek(nom_arch, -sizeof(nom_reg), SEEK_CUR);

Utilizo Windows XP y Borland C++ 3.0

Un beso para ti por tu ayuda.

Karo

Date: Mon, 9 Jun 2008 08:53:54 -0500
From: saavedraphp en gmail.com
To: cconclase en listas.conclase.net
Subject: [C con Clase] Espero te sirva Retroceder el puntero en archivo	binario

Hola carolina.
lo que yo hago es primero buscar el registro y un a vez encontrado guardo la posición ahí el código.
bool Buscar_Persona(int pcodigo, int *posicion, bool *HuboError )
{
        FILE *aPersona;
        rP rPersona;
        bool encontro = false;
        *HuboError = false;
        aPersona = fopen(cNombreArchivoPersona, "rb");
        if(aPersona == NULL)
        {
                *HuboError = true;
        }
        else
        {
                fread(&rPersona, sizeof(rPersona), 1, aPersona);
                while( (!feof(aPersona)) && (!encontro) )
                {
                        if( (rPersona.id_persona == pcodigo) && (rPersona.eliminado == false) )
                        {

                                encontro = true;
                        }
                        else
                        {
                                fread(&rPersona, sizeof(rPersona), 1, aPersona);
                                *posicion = *posicion + 1;

                        }
                }
                fclose(aPersona);

        }
        return encontro;
}
 
 
------------
 
luego hago el cambios modificados  envío la posición y modifico los datos así,
 
bool ModificarPersona(int pid_persona,char* pnombre, char* p_apaterno, char* p_amaterno,
                       char* pdireccion_foto, bool *HuboError, int *pPosicion )
{
                                                      
        FILE *aPersona;
        rP rPersona;
        bool Modifico = false;
        aPersona = fopen(cNombreArchivoPersona, "rb+");
        if(aPersona == NULL)
        {
                *HuboError = true;
        }
        else
        {
                        fread(&rPersona, sizeof(rPersona), 1, aPersona);
                        fseek(aPersona, sizeof(rPersona) * (*pPosicion), SEEK_SET);

                        rPersona.id_persona = pid_persona;
                        strcpy(rPersona.nombre, pnombre);
                        strcpy(rPersona.ap_pat, p_apaterno);
                        strcpy(rPersona.ap_mat, p_amaterno);

                        strcpy(rPersona.direccion_foto, pdireccion_foto);
                        Modifico = true;
                fwrite(&rPersona, sizeof(rPersona), 1, aPersona);
                fclose(aPersona);
        }
      return Modifico;
}

 
 

_________________________________________________________________
Discover the new Windows Vista
http://search.msn.com/results.aspx?q=windows+vista&mkt=en-US&form=QBRE
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20080616/01927514/attachment.html>


Más información sobre la lista de distribución Cconclase