| Ver tema anterior :: Ver siguiente tema |
| Autor | Mensaje |
|---|
dark_night
Registrado: 03 Oct 2004 Mensajes: 18 Ubicación: stgo, chile
| Publicado: 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
| Publicado: 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
| Publicado: 06/10/2004 3:05 pm | | | Título: |
| oka gracias....hice los ke me dijiste pero sigo teniendo el mismo problema  |
|
| Volver arriba | |
 |
|
alp

Registrado: 12 Abr 2004 Mensajes: 413
| Publicado: 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 | |
 |
dark_night
Registrado: 03 Oct 2004 Mensajes: 18 Ubicación: stgo, chile
| Publicado: 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
| Publicado: 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 | |
 |
|
dark_night
Registrado: 03 Oct 2004 Mensajes: 18 Ubicación: stgo, chile
| Publicado: 07/10/2004 1:53 pm | | | Título: |
| OK..GRACIAS por fin pude arreglar el problema  |
|
| Volver arriba | |
 |
|
|