manejo - Escribir en un archivo usando fputs en C
manejo de archivos en c (2)
¿Podría alguien decirme por qué el archivo no cambia? Funciona cuando uso rewind
o fseek
pero no de otra manera.
¿Cuál es la forma estándar de usar fputs
después de los fputs
? El indicador de archivo está en la posición 9, por lo que las fputs
deben escribir después de eso, pero no hace nada.
En archivo:
abcd efgh ijkl mnor
En código fuente:
char c;
char str[15];
FILE *fp = fopen("d://data.txt","r+");
fgets(str, 10, fp);
// fseek(fp, 9, SEEK_SET);
// rewind(fp);
printf("%d/n", ftell(fp));
// ftel shows that it''s in "9".
printf("%s", str);
fputs(str, fp);
// why its not working
fclose(fp);
La documentación de MS para fopen
dice esto:
Cuando se especifica el tipo de acceso
"r+"
,"w+"
o"a+"
, tanto la lectura como la escritura están habilitadas (se dice que el archivo está abierto para "actualizar"). Sin embargo, cuando cambia de lectura a escritura, la operación de entrada debe encontrar un marcadorEOF
. Si no hayEOF
, debe usar una llamada intermedia a una función de posicionamiento de archivos. Las funciones de posicionamiento de archivos sonfsetpos
,fseek
yrewind
. Cuando pasa de la escritura a la lectura, debe usar una llamada intermedia para realizar unafflush
o una función de posicionamiento de archivos.
Con respecto a la definición de fopen/''+''
en el estándar C (por ejemplo, como en este borrador estándar C en línea ), cambiar de lectura a escritura requiere una llamada intermedia a una función de posicionamiento de archivos (el énfasis es mío):
7.21.5.3 La función fopen
(7) Cuando se abre un archivo con modo de actualización (''+'' como segundo o tercer carácter en la lista anterior de valores de argumento de modo), tanto la entrada como la salida pueden realizarse en la secuencia asociada. Sin embargo, la salida no debe seguirse directamente de la entrada sin una llamada intermedia a la función fflush o a una función de posicionamiento de archivos (fseek, fsetpos o rewind) , y la entrada no debe seguirse directamente de la salida sin una llamada interpuesta a un archivo función, a menos que la operación de entrada encuentre el final del archivo. Abrir (o crear) un archivo de texto con modo de actualización puede abrir (o crear) una secuencia binaria en algunas implementaciones.
Por lo tanto, le sugiero que escriba el siguiente código para solucionar su problema:
fseek ( fp , 0, SEEK_CUR);
fputs(str, fp);