c++ - funciona - rewind c
fseek no funciona cuando el archivo se abre en modo "a"(agregar) (1)
Cuando abre en el modo de adición, el puntero del archivo vuelve al final del archivo antes de cada escritura. Puede reposicionar el puntero con fseek
para leer, pero tan pronto como llama a una función que escribe en el archivo, el puntero regresa al final del archivo.
O, dicho de otra manera, para evitar la pérdida de datos, la posición del "puntero de escritura" anula la posición del "puntero de lectura". Después de cualquier apéndice, el puntero de escritura rebota al nuevo EOF
.
La respuesta en este enlace hace referencia a la sección correspondiente del estándar C.
Utilice el modo "w+"
si desea escribir en lugares arbitrarios en el archivo. Un archivo existente será sobrescrito.
Si desea añadir un archivo existente inicialmente, pero luego fseek
a un lugar arbitrario, use "r+"
seguido de fseek(f, 0, SEEK_END)
.
FILE* f = fopen("rajat", "w");
fputs("sometext", f);
fseek(f, 6, SEEK_SET);
fputs("is a", f);
fclose(f);
Devuelve con éxito: "someteis a"
Pero
FILE* f = fopen("rajat", "a");
fputs("sometext", f);
fseek(f, 6, SEEK_SET);
fputs("is a", f);
fclose(f);
No funciona. Devuelve "sometextis a"
¿Alguna idea de por qué? ¿Cuál es la solución a esto, para que el segundo código salga exactamente igual que el primero?