txt manejo lenguaje leer lectura guardar escritura ejercicios datos binarios archivos archivo c string file

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 marcador EOF . Si no hay EOF , debe usar una llamada intermedia a una función de posicionamiento de archivos. Las funciones de posicionamiento de archivos son fsetpos , fseek y rewind . Cuando pasa de la escritura a la lectura, debe usar una llamada intermedia para realizar una fflush 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);