C Leer archivos
Leer un archivo
En el capítulo anterior, escribimos en un archivo usando w
y a
modos dentro del fopen()
función.
Para leer un archivo, puede utilizar el modo r
:
Ejemplo
FILE *fptr;
// Abrir un archivo en modo lectura
fptr = fopen("filename.txt", "r");
Esto hará que el filename.txt
se abra para lectura.
Requiere un poco de trabajo leer un archivo en C. ¡Aguanta! Te guiaremos paso a paso.
A continuación, necesitamos crear una cadena que debería ser lo suficientemente grande como para almacenar el contenido del archivo.
Por ejemplo, creemos una cadena que pueda almacenar hasta 100 caracteres:
Ejemplo
FILE *fptr;
// Abrir un archivo en modo lectura
fptr = fopen("filename.txt", "r");
// Almacenar el contenido del archivo
char myString[100];
Para leer el contenido de filename.txt
, podemos usar la función fgets()
.
La función fgets()
toma tres parámetros:
Ejemplo
fgets(myString, 100, fptr);
- El primer parámetro específica dónde almacenar el contenido del archivo, que estará en la matriz
myString
que acabamos de crear. - El segundo parámetro especifica el tamaño máximo de datos a leer, que debe coincidir con el tamaño de
myString
(100
). - El tercer parámetro requiere un puntero de archivo que se utiliza para leer el archivo (
fptr
en nuestro ejemplo).
Ahora, podemos imprimir la cadena, que generará el contenido del archivo:
Ejemplo
FILE *fptr;
// Abrir un archivo en modo lectura
fptr = fopen("filename.txt", "r");
// Almacenar el contenido del archivo
char myString[100];
// Lee el contenido y guárdalo en su interior myString
fgets(myString, 100, fptr);
// Imprimir el contenido del archivo
printf("%s", myString);
// Cerrar el archivo
fclose(fptr);
Hello World!
Nota: La función fgets
solo lee la primera línea del archivo. Si recuerdas, había dos líneas de texto en filename.txt
.
Para leer cada línea del archivo, puede utilizar un bucle while
:
Ejemplo
FILE *fptr;
// Abrir un archivo en modo lectura
fptr = fopen("filename.txt", "r");
// Almacenar el contenido del archivo
char myString[100];
// Lee el contenido e imprímelo
while(fgets(myString, 100, fptr)) {
printf("%s", myString);
}
// Cerrar el archivo
fclose(fptr);
Hello World!
Hi everybody!
Buenas prácticas
Si intenta abrir un archivo para leer que no existe, la función fopen()
devolverá NULL
.
Consejo: Como buena práctica, podemos usar una declaración if
para probar NULL
e imprimir texto en su lugar (cuando el archivo no existe):
Ejemplo
FILE *fptr;
// Abrir un archivo en modo lectura
fptr = fopen("loremipsum.txt", "r");
// Imprima algún texto si el archivo no existe
if(fptr == NULL) {
printf("No puedo abrir el archivo.");
}
// Cerrar el archivo
fclose(fptr);
Si el archivo no existe, se imprime el siguiente texto:
No puedo abrir el archivo.
Con esto en mente, podemos crear un código más sustentable si usamos nuestro ejemplo anterior de "leer un archivo" nuevamente:
Ejemplo
Si el archivo existe, lea el contenido e imprímalo. Si el archivo no existe imprime un mensaje:
FILE *fptr;
// Abrir un archivo en modo lectura
fptr = fopen("filename.txt", "r");
// Almacenar el contenido del archivo
char myString[100];
// Si el archivo existe
if(fptr != NULL) {
// Lee el contenido e imprímelo
while(fgets(myString, 100, fptr)) {
printf("%s", myString);
}
// Si el archivo no existe
} else {
printf("No puedo abrir el archivo.");
}
// cerrar el archivo
fclose(fptr);
Hello World!
Hi everybody!