[C con Clase] Espero te sirva Retroceder el puntero en archivo binario

Luis Saavedra Linares saavedraphp en gmail.com
Lun Jun 9 15:53:54 CEST 2008


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;
}
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20080609/bc398ba3/attachment.html>


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