Duda del fseek de C

Buenas, tengo una pequeña duda sobre esta función. Estoy intentado abrir un archivo para escritura, pero quiero escribir al comienzo del archivo asi que hago:
fseek(nombre, 0 , 0);

¿Esto es correcto? Es que por alguna razon no me escribe al comienzo, lo he solucionado abriendo como lectura y escritura("r+b") y no como escritura("ab") asi me posiciona al principio del mismo y de esta forma si que funciona, pero no me gusta abrirlo como lectura y escritura cuando solo voy a escribir. Gracias y saludos
Si te funciona al abrirlo como lectura y escritura no te preocupes más. No es lo mismo que como si solo quisieras leer, ya que correrías el riesgo de escribir, pero al ser al revés lo más habitual es que lo habras en el modo mixto. De hecho, y espero no estar diciendo ninguna burrada, creo que el fseek solo funciona correctamente en el modo lectura y en el lectura+escritura.
De todos modos tu sintaxis es correcta en cualquier caso.
Un saludo.
Em, te olvidas del modo "w"? Ese es el modo de escritura, el modo "a" es de añadir.
Revisate la documentacion de fopen que parece que tienes un buen lio con los modos xD
¿Pero "w" en mi caso binario "wb" no es para crear un archivo en modo escritura?, es decir, que el archivo que halla lo machara ¿no?
Estás olvidando argumentos:
int fseek(FILE *stream, long int desplazamiento, int origen);
La función fseek activa el indicador de posición de ficheros para el stream apuntado por stream. Para un stream binario, la nueva posición, medido en caracteres del principio del fichero, es obtenida mediante la suma de desplazamiento y la posición especificada por origen. La posición especificada es el comienzo del fichero si origen es SEEK_SET, el valor actual del indicador de posición de fichero si es SEEK_CUR, o final de fichero si es SEEK_END. Un stream binario realmente no necesita soportar llamadas a fseek con un valor de origen de SEEK_END. Para un stream de texto, o bien desplazamiento será cero, o bien desplazamiento será un valor retornado por una llamada anterior a la función ftell al mismo stream y origen será SEEK_SET. Una llamada correcta a la función fseek despeja el indicador de final de fichero para el stream y deshace cualquier efecto producido por la función ungetc en el mismo stream. Después de una llamada a fseek, la siguiente operación en un stream de actualización puede ser de entrada o salida.


En tu caso deberías emplear la función con los parámetros:

fseek(f,0, SEEK_SET)

Por cierto, para abrir el archivo como escritura "w+b" o "a+b", el segundo caso es para appendix, es decir, para agregar al final de un fichero de text (si no existe lo crea). "W+b" por el contrario si existe lo sobreescribe. Espero haber servido de ayuda. [bye]
Usar "r+b" es correcto, todos los otros modos de escritura son o bien para crear un archivo nuevo o para añadir datos al final de un archivo.

Y lo del fseek, seguramente te funcionará porque SEEK_SET suele ser 0, pero mejor que lo pongas como dice kek_500 porque es más seguro y más comprensible.
5 respuestas