E/S de archivos C: crear, abrir, leer, escribir y cerrar un archivo
C Gestiรณn de archivos
Un archivo se puede utilizar para almacenar un gran volumen de datos persistentes. Al igual que muchos otros lenguajes, "C" ofrece las siguientes funciones de gestiรณn de archivos:
- Creaciรณn de un archivo
- Abrir un archivo
- Leer un archivo
- Escribir en un archivo
- Cerrar un archivo
A continuaciรณn se presentan las funciones de administraciรณn de archivos mรกs importantes disponibles en 'C',
| funciรณn | propรณsito | |
|---|---|---|
| abrir () | Crear un archivo o abrir un archivo existente | |
| cerrar () | Cerrar un archivo | |
| fprintf() | Escribir un bloque de datos en un archivo | |
| fscanf() | Leer un bloque de datos de un archivo | |
| obtenerc() | Lee un solo carรกcter de un archivo | |
| putc () | Escribe un solo carรกcter en un archivo. | |
| obtener W () | Lee un nรบmero entero de un archivo | |
| poner () | Escribir un nรบmero entero en un archivo | |
| buscar () | Establece la posiciรณn de un puntero de archivo en una ubicaciรณn especificada | |
| ftell () | Devuelve la posiciรณn actual de un puntero de archivo. | |
| rebobinar () | Establece el puntero del archivo al principio de un archivo. |
Cรณmo crear un archivo
Siempre que desee trabajar con un archivo, el primer paso es crear un archivo. Un archivo no es mรกs que espacio en una memoria donde se almacenan datos.
Para crear un archivo en un programa en 'C' se utiliza la siguiente sintaxis:
FILE *fp;
fp = fopen ("file_name", "mode");
En la sintaxis anterior, el archivo es una estructura de datos definida en la biblioteca estรกndar.
fopen es una funciรณn estรกndar que se utiliza para abrir un archivo.
- Si el archivo no estรก presente en el sistema, se crea y luego se abre.
- Si un archivo ya estรก presente en el sistema, se abre directamente usando este funciรณn.
fp es un puntero de archivo que apunta al tipo de archivo.
Siempre que abra o cree un archivo, debe especificar quรฉ va a hacer con รฉl. En la programaciรณn en "C", se puede crear o abrir un archivo con fines de lectura o escritura. Se utiliza un modo para especificar si desea abrir un archivo para cualquiera de los fines que se indican a continuaciรณn. A continuaciรณn, se presentan los diferentes tipos de modos en la programaciรณn en "C" que se pueden utilizar al trabajar con un archivo.
| Modo de archivo | Descripciรณn |
|---|---|
| r | Abra un archivo para leer. Si un archivo estรก en modo de lectura, no se eliminan datos si un archivo ya estรก presente en un sistema. |
| w | Abra un archivo para escribir. Si un archivo estรก en modo de escritura, se crea un nuevo archivo si no existe en absoluto. Si un archivo ya estรก presente en un sistema, todos los datos dentro del archivo se truncan y se abre para fines de escritura. |
| a | Abrir un archivo en modo anexar. Si un archivo estรก en modo de agregar, entonces se abre el archivo. El contenido del archivo no cambia. |
| r+ | Abierto para leer y escribir desde el principio. |
| w+ | abierto para lectura y escritura, sobrescribiendo un archivo |
| a+ | abierto para lectura y escritura, anexando al archivo |
En la sintaxis dada, el nombre del archivo y el modo se especifican como cadenas, por lo tanto, siempre deben estar entre comillas dobles.
Ejemplo:
#include <stdio.h>
int main() {
FILE *fp;
fp = fopen ("data.txt", "w");
}
Salida:
El archivo se crea en la misma carpeta donde guardรณ su cรณdigo.
Puede especificar la ruta donde desea crear su archivo.
#include <stdio.h>
int main() {
FILE *fp;
fp = fopen ("D://data.txt", "w");
}
Cรณmo cerrar un archivo
Siempre se debe cerrar un archivo cuando finalizan las operaciones en รฉl. Esto significa que se cancelan el contenido y los vรญnculos al archivo. Esto evita que se daรฑe accidentalmente el archivo.
'C' proporciona la funciรณn fclose para realizar la operaciรณn de cierre de archivos. La sintaxis de fclose es la siguiente:
fclose (file_pointer);
Ejemplo:
FILE *fp;
fp = fopen ("data.txt", "r");
fclose (fp);
La funciรณn fclose toma un puntero de archivo como argumento. Luego, el archivo asociado con el puntero del archivo se cierra con la ayuda de la funciรณn fclose. Devuelve 0 si el cierre fue exitoso y EOF (fin del archivo) si se produjo un error al cerrar el archivo.
Despuรฉs de cerrar el archivo, el mismo puntero de archivo tambiรฉn se puede utilizar con otros archivos.
En la programaciรณn 'C', los archivos se cierran automรกticamente cuando finaliza el programa. Cerrar un archivo manualmente escribiendo la funciรณn fclose es una buena prรกctica de programaciรณn.
Escribir en un archivo
En C, cuando escribe en un archivo, se deben agregar explรญcitamente los caracteres de nueva lรญnea "\n".
La biblioteca stdio ofrece las funciones necesarias para escribir en un archivo:
- fputc(carรกcter, puntero_archivo): Escribe un carรกcter en el archivo seรฑalado por file_pointer.
- fputs(cadena, puntero_archivo): Escribe una cadena en el archivo seรฑalado por file_pointer.
- fprintf(file_pointer, str, variables_lists): Imprime una cadena al archivo seรฑalado por file_pointer. Opcionalmente, la cadena puede incluir especificadores de formato y una lista de variables listas_variables.
El siguiente programa muestra cรณmo realizar la escritura en un archivo:
Funciรณn fputc():
#include <stdio.h>
int main() {
int i;
FILE * fptr;
char fn[50];
char str[] = "Guru99 Rocks\n";
fptr = fopen("fputc_test.txt", "w"); // "w" defines "writing mode"
for (i = 0; str[i] != '\n'; i++) {
/* write to file using fputc() function */
fputc(str[i], fptr);
}
fclose(fptr);
return 0;
}
Salida:
El programa anterior escribe un solo carรกcter en el fputc_test.txt archivo hasta que llegue al sรญmbolo de la siguiente lรญnea โ\nโ, que indica que la oraciรณn se escribiรณ correctamente. El proceso consiste en tomar cada carรกcter de la matriz y escribirlo en el archivo.
- En el programa anterior, creamos y abrimos un archivo llamado fputc_test.txt en modo de escritura y declaramos nuestra cadena que se escribirรก en el archivo.
- Realizamos una operaciรณn de escritura carรกcter por carรกcter usando un bucle for y colocamos cada carรกcter en nuestro archivo hasta que se encuentra el carรกcter โ\nโ, luego el archivo se cierra usando la funciรณn fclose.
fputs() Funciรณn:
#include <stdio.h>
int main() {
FILE * fp;
fp = fopen("fputs_test.txt", "w+");
fputs("This is Guru99 Tutorial on fputs,", fp);
fputs("We don't need to use for loop\n", fp);
fputs("Easier than fputc function\n", fp);
fclose(fp);
return (0);
}
Salida:
- En el programa anterior, hemos creado y abierto un archivo llamado fputs_test.txt en modo de escritura.
- Despuรฉs de realizar una operaciรณn de escritura usando la funciรณn fputs() escribiendo tres valores diferentes instrumentos de cuerda
- Luego el archivo se cierra usando la funciรณn fclose.
fprintf()Funciรณn:
#include <stdio.h>
int main() {
FILE *fptr;
fptr = fopen("fprintf_test.txt", "w"); // "w" defines "writing mode"
/* write to file */
fprintf(fptr, "Learning C with Guru99\n");
fclose(fptr);
return 0;
}
Salida:
- En el programa anterior hemos creado y abierto un archivo llamado fprintf_test.txt en modo de escritura.
- Despuรฉs de realizar una operaciรณn de escritura utilizando la funciรณn fprintf() escribiendo una cadena, el archivo se cierra utilizando la funciรณn fclose.
Leer datos de un archivo
Hay tres funciones diferentes dedicadas a leer datos de un archivo.
- fgetc(file_pointer): Devuelve el siguiente carรกcter del archivo al que apunta el puntero del archivo. Cuando se llega al final del archivo, se devuelve el EOF.
- fgets(buffer, n, puntero_de_archivo): Lee n-1 caracteres del archivo y almacena la cadena en un bรบfer en el que se aรฑade el carรกcter NULL '\0' como รบltimo carรกcter.
- fscanf(puntero_archivo, especificadores_conversiรณn, direcciones_variable): Se utiliza para analizar y analizar datos. Lee caracteres del archivo y asigna la entrada a una lista de punteros variables direcciones_variables utilizando especificadores de conversiรณn. Tenga en cuenta que, al igual que con scanf, fscanf deja de leer una cadena cuando se encuentra un espacio o una nueva lรญnea.
El siguiente programa demuestra la lectura del archivo fputs_test.txt usando las funciones fgets(), fscanf() y fgetc() respectivamente:
#include <stdio.h>
int main() {
FILE * file_pointer;
char buffer[30], c;
file_pointer = fopen("fprintf_test.txt", "r");
printf("----read a line----\n");
fgets(buffer, 50, file_pointer);
printf("%s\n", buffer);
printf("----read and parse data----\n");
file_pointer = fopen("fprintf_test.txt", "r"); //reset the pointer
char str1[10], str2[2], str3[20], str4[2];
fscanf(file_pointer, "%s %s %s %s", str1, str2, str3, str4);
printf("Read String1 |%s|\n", str1);
printf("Read String2 |%s|\n", str2);
printf("Read String3 |%s|\n", str3);
printf("Read String4 |%s|\n", str4);
printf("----read the entire file----\n");
file_pointer = fopen("fprintf_test.txt", "r"); //reset the pointer
while ((c = getc(file_pointer)) != EOF) printf("%c", c);
fclose(file_pointer);
return 0;
}
Resultado:
----read a line---- Learning C with Guru99 ----read and parse data---- Read String1 |Learning| Read String2 |C| Read String3 |with| Read String4 |Guru99| ----read the entire file---- Learning C with Guru99
- En el programa anterior, hemos abierto el archivo llamado โfprintf_test.txtโ, que fue escrito previamente usando la funciรณn fprintf(), y contiene โLearning C with GuruCadena "99". La leemos usando la funciรณn fgets() que lee lรญnea por lรญnea, donde el tamaรฑo del bรบfer debe ser suficiente para manejar la lรญnea completa.
- Reabrimos el archivo para restablecer el puntero de archivo para que apunte al principio del archivo. Creamos varias variables de cadena para manejar cada palabra por separado. Imprimimos las variables para ver su contenido. La funciรณn fscanf() se utiliza principalmente para...tracy analizar datos de un archivo.
- Vuelva a abrir el archivo para restablecer el archivo de puntero para que apunte al principio del archivo. Lea los datos e imprรญmalos desde el archivo carรกcter por carรกcter usando la funciรณn getc() hasta que encuentre la declaraciรณn EOF
- Luego de realizar una operaciรณn de lectura de archivo utilizando diferentes variantes, nuevamente cerramos el archivo utilizando la funciรณn fclose.
Lectura y escritura de archivos interactivos con getc y putc
Estas son las operaciones de archivo mรกs simples. Getc significa obtener un carรกcter y putc significa poner un carรกcter. Estas dos funciones se utilizan para manejar solo un carรกcter a la vez.
El siguiente programa demuestra las funciones de manejo de archivos en la programaciรณn 'C':
#include <stdio.h>
int main() {
FILE * fp;
char c;
printf("File Handling\n");
//open a file
fp = fopen("demo.txt", "w");
//writing operation
while ((c = getchar()) != EOF) {
putc(c, fp);
}
//close file
fclose(fp);
printf("Data Entered:\n");
//reading
fp = fopen("demo.txt", "r");
while ((c = getc(fp)) != EOF) {
printf("%c", c);
}
fclose(fp);
return 0;
}
Salida:
- En el programa anterior hemos creado y abierto un archivo llamado demo en modo de escritura.
- Despuรฉs de realizar una operaciรณn de escritura, el archivo se cierra mediante la funciรณn fclose.
- Hemos abierto nuevamente un archivo que ahora contiene datos en modo de lectura. Se ejecutarรก un bucle while hasta que se encuentre el fin del archivo. Una vez que se encuentre el fin del archivo, se finalizarรก la operaciรณn y se mostrarรกn los datos mediante la funciรณn printf.
- Despuรฉs de realizar una operaciรณn de lectura, el archivo se cierra nuevamente utilizando la funciรณn fclose.
Resumen
- Un archivo es un espacio en una memoria donde se almacenan datos.
- La programaciรณn 'C' proporciona varias funciones para manejar un archivo.
- Un mecanismo de manipulaciรณn de archivos se denomina gestiรณn de archivos.
- Es necesario abrir un archivo antes de realizar operaciones en รฉl.
- Un archivo se puede abrir en modo de lectura, escritura o adiciรณn.
- Las funciones Getc y putc se utilizan para leer y escribir un solo carรกcter.
- La funciรณn fscanf() permite leer y analizar datos de un archivo
- Podemos leer (usando el getc funciรณn) un archivo completo por looping para cubrir todo el archivo hasta que se encuentre el final del archivo (EOF).
- Podemos escribir en un archivo despuรฉs de crear su nombre, usando la funciรณn fprintf () y debe tener el carรกcter de nueva lรญnea al final del texto de la cadena.











