Tal y como veo yo como funciona:
Código:
j:=posicion(reg.Nombre);
if j=-1 then
begin
seek(arch,filesize(arch));
write(arch,reg);
//si j=-1 se añade 1 registro al final del fichero
end
else
begin
seek(arch,j);
write(arch,reg);
//si j<>-1 se cambia el registro j por el nnuevo
end;
En ningun caso se añaden 2 registros como indicas.