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
myStringque 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 (
fptren 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!