"...Lo intente con a+ y el resultado continua no muy favorable..."
Te modifica el siguiente registro? Por 1000 te digo porque :))
Cuando estas buscando el registro objetivo el puntero de lectura siempre queda al final de la lectura:
Código:
...
fread (®istro, sizeof(struct sRegistro), 1, clientzz);
while (!feof(clientzz))
{
if (newregistro.newcodigo == registro.codigo)
...
Es decir que si la estructura del cliento ocupa 100 bytes, cada fread cargas 100bytes, y el puntero de lectura y escritura (en a+) avanza 100 bytes. Es decir que cuando has encontrado el cliente a modificar el puntero de escritura está sizeof(struct sRegistro) bytes delante de lo que realmente quieres modificar. La solucion es tan simple como parece: cuando has encontrado el objetivo haces un fseek sizeof(struct sRegistro) bytes atras y ya tienes posicionado el puntero de escritura para sobreescribir el objetivo.
Saludos
vosk