/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

ayuda con archivos

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
dark_night



Registrado: 03 Oct 2004
Mensajes: 18
Ubicación: stgo, chile

MensajePublicado: 06/10/2004 1:06 pm
Título: ayuda con archivos

holas tengo un problema al crear en el archivo..por alguna razon me guarda registro por medio, es decir el segundo sobreescribe el primero y el tercero el segundo...etc....

este es el codigo

Código:

void Guardar(struct registro animal)
{
 FILE *p;

 if(fopen("clientes.dat", "r")==NULL)
   p=fopen("clientes.dat", "w");
 else
   p=fopen("clientes.dat", "a");

fwrite(&animal, sizeof(animal), 1, p);
fclose(p);
}


la funcion es llamada una ves llenada la estructura...
de antemano gracias
Volver arriba
elColme



Registrado: 14 Abr 2004
Mensajes: 102
Ubicación: España

MensajePublicado: 06/10/2004 2:04 pm
Título: apertura binaria

En la implementación de esa función no olvides aplicar el modo de apertura correcto (texto o binario),ya que utilizas una estructura no debes emplear sólo "r" o "b" sino "rb" o "wb".

Veo que en en las sentencias de decisión compruebas si ya existe o no para crearlo o añadir, pero no olvides aplicar en la apertura el modo binario.

Sal2
Volver arriba
dark_night



Registrado: 03 Oct 2004
Mensajes: 18
Ubicación: stgo, chile

MensajePublicado: 06/10/2004 3:05 pm
Título:

oka gracias....hice los ke me dijiste pero sigo teniendo el mismo problema Crying or Very sad
Volver arriba
alp



Registrado: 12 Abr 2004
Mensajes: 413

MensajePublicado: 06/10/2004 3:38 pm
Título:

Hola.

Cuando abres un fichero, te encuentras posicionado al principio. Para añadir registros al fichero, debes posicionarte al final del mismo, antes de escribir. Una vez hayas escrito el primer registro, te encontrarás en el final del fichero, por lo que sólo debes situarte una vez, a menos que cambies la posición.
Código:
fseek(p, 0, SEEK_END);


Un saludo.
Volver arriba
Yahoo Messenger
dark_night



Registrado: 03 Oct 2004
Mensajes: 18
Ubicación: stgo, chile

MensajePublicado: 06/10/2004 4:06 pm
Título:

ok, tonces tengo ke situarme al final del fichero antes de escribir??...y si es asi komo hago eso?? es ke no entendi mucho tu post :p
Volver arriba
alp



Registrado: 12 Abr 2004
Mensajes: 413

MensajePublicado: 07/10/2004 9:36 am
Título:

Para situarte en una posición concreta, debes usar fseek(). Su prototipo es:

fseek(FILE *fp, long offset, int desde_donde);

Le pasas el manipulador del fichero, la nueva posición (relativa al tercer parámetro), y desde dónde cambias la posición.

El último parámetro admite 3 valores:

SEEK_SET --> desde el principio
SEEK_CUR --> desde la posición actual
SEEK_END --> desde el final

Por ejemplo:

fseek(p, 0, SEEK_SET);
se posiciona en el principio del fichero (avanzas 0 bytes desde el inicio).

fseek(p, 256, SEEK_SET);
se sitúa en el byte 256 (avanzas 256 bytes desde el inicio)

fseek(p, 5, SEEK_CUR);
avanza 5 bytes desde la posición actual

fseek(p, -sizeof(struct datos), SEEK_CUR);
retrocede sizeof(struct datos) bytes desde la posición actual (el valor offset es negativo)

fseek(p, 0, SEEK_END);
se posiciona en el final del fichero (te desplazas 0 bytes desde el final)

fseek(p, 32, SEEK_END);
se posiciona a 32 bytes del final (te desplazas 32 bytes partiendo del final del fichero)


Un saludo.
Volver arriba
Yahoo Messenger
dark_night



Registrado: 03 Oct 2004
Mensajes: 18
Ubicación: stgo, chile

MensajePublicado: 07/10/2004 1:53 pm
Título:

OK..GRACIAS
por fin pude arreglar el problema Very Happy
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com