Ver Mensaje Individual
  #7 (permalink)  
Antiguo 04/04/2015, 15:19
Avatar de vangodp
vangodp
 
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: Posicionarse en el registro inicial después de una búsqueda [C]

Tienes un error.
Para ficheros de texto no deberías utilizar SEEK_CUR en fseek, debería ser SEEK_SET. O sea que deberíamos leer siempre desde el comienzo el segundo parámetro es el que se debería encargar de mover el cursor(puntero). Con fseek (ptrFile, 3*sizeof(trad), SEEK_CUR); estas diciendo al programa que se desplace 3 registros más adelante pero desde la posición actual. no se si se puede hacer eso.

Al menos es lo que pone en la referencia de cplusplus: http://www.cplusplus.com/reference/cstdio/fseek/

...En la parte que dice:
Cita:
For streams open in text mode, offset shall either be zero or a value returned by a previous call to ftell, and origin shall necessarily be SEEK_SET.
...Que traducido al google translator XD, nos dice:
Cita:
Para flujos abiertos en modo texto, el offset(offset es el segundo parámetro de fseek ;) ) deberá o bien ser cero o otro valor devuelto por una llamada previa a ftell y origin( 3º parámetro ) deberá necesariamente ser SEEK_SET.
Ahora bien.. No se si esto es cierto o no debido que soy muy noobs XDD. A ver si alguien con más exp nos aclara eso.

Tampoco sabría decirte que pasa si leyemos más allá del fin, pero parece que no se produce la lectura.

Entonces la parte de mi código que te puse seria invalida ya que uso SEEK_END...¡PERO FUNCIONA!
Código C:
Ver original
  1. long nRegistros;
  2.     fseek ( ptrFile, 0, SEEK_END ); // Colocar el cursor al final del fichero
  3.     nRegistros = ftell ( ptrFile ) / sizeof ( Traductor ); // Tamaño en registros
  4.     printf ( "Hay %d registros en el fichero.\n", nRegistros );

No se la verdad... Espero que nos aclaren por que ya tengo dudas hasta yo jajaj.

Suerte!