El lenguaje de programación C admite cuatro funciones predefinidas para leer el contenido de un archivo, definido en el archivo de encabezado stdio.h :
- fgetc() : esta función se usa para leer un solo carácter del archivo.
- fgets() : esta función se usa para leer strings de archivos.
- fscanf() : esta función se utiliza para leer la entrada formateada de un archivo.
- fread() : esta función se utiliza para leer el bloque de bytes sin formato de los archivos. Esto se utiliza para leer archivos binarios.
Pasos para leer un archivo:
- Abra un archivo usando la función fopen() y almacene la referencia del archivo en un puntero de ARCHIVO.
- Lea el contenido del archivo usando cualquiera de estas funciones fgetc(), fgets(), fscanf() o fread().
- Archivo cierra el archivo usando la función fclose().
Comencemos discutiendo cada una de estas funciones en detalle.
fgetc()
fgetc() lee los caracteres señalados por el puntero de función en ese momento. En cada lectura exitosa, devuelve el carácter (valor ASCII) leído del flujo y avanza la posición de lectura al siguiente carácter. Esta función devuelve un EOF constante (-1) cuando no hay contenido para leer o una lectura fallida.
Sintaxis:
int fgetc(ARCHIVO *ptr);
Acercarse:
- Este programa lee todo el contenido del archivo, utilizando esta función leyendo los caracteres uno por uno.
- Se usará el bucle Do-While que leerá el carácter hasta que llegue al final del archivo.
- Cuando llega al final, devuelve el carácter EOF (-1).
Uso de EOF:
a continuación se muestra el programa C para implementar el enfoque anterior :
C
// C program to implement // the above approach #include <stdio.h> #include <stdlib.h> #include <string.h> // Driver code int main() { FILE* ptr; char ch; // Opening file in reading mode ptr = fopen("test.txt", "r"); if (NULL == ptr) { printf("file can't be opened \n"); } printf("content of this file are \n"); // Printing what is written in file // character by character using loop. do { ch = fgetc(ptr); printf("%c", ch); // Checking if character is not EOF. // If it is EOF stop eading. } while (ch != EOF); // Closing the file fclose(ptr); return 0; }
Fichero de entrada:
GeeksforGeeks | A computer science portal for geeks
Producción:
En el código anterior, el enfoque es leer un carácter del archivo y verificar si no es EOF, si no lo es, imprimirlo y, si lo es, dejar de leer.
Uso de feof(): la función
feof() toma el puntero del archivo como argumento y devuelve verdadero si el puntero llega al final del archivo.
Sintaxis:
int feof(ARCHIVO *ptr);
Acercarse:
- En este enfoque, se lee un carácter usando fgetc().
- Usando la función feof() verifique el final del archivo. ya que feof() devuelve verdadero después de que llega al final.
- Use el operador lógico NOT (!) para que cuando llegue a la condición final se convierta en falso y se detenga el ciclo.
A continuación se muestra el programa C para implementar el enfoque anterior:
C
// C program to implement // the above approach #include <stdio.h> #include <stdlib.h> #include <string.h> // Driver code int main() { FILE* ptr; char ch; ptr = fopen("test.txt", "r"); if (NULL == ptr) { printf("file can't be opened \n"); } printf("content of this file are \n"); while (!feof(ptr)) { ch = fgetc(ptr); printf("%c", ch); } fclose(ptr); return 0; }
Fichero de entrada:
GeeksforGeeks | A computer science portal for geeks
Producción:
fgets()
fgets() lee una string a la vez del archivo. fgets() devuelve una string si la función la lee con éxito o devuelve NULL si no se puede leer.
Sintaxis:
char * fgets(char *str, int size, FILE * ptr);
Aquí,
str: es una string en la que fgets() almacena una string después de leerla del archivo.
tamaño: es el máximo de caracteres para leer de la transmisión.
ptr: Es un puntero de archivo.
Acercarse:
- En este enfoque, el contenido del archivo se lee un carácter a la vez hasta llegar al final del archivo.
- Cuando llegamos al final del archivo, fgets() no puede leer y devuelve NULL y el programa dejará de leer.
A continuación se muestra el programa C para implementar el enfoque anterior:
C
// C program to implement // the above approach #include <stdio.h> #include <stdlib.h> #include <string.h> // Driver code int main() { FILE* ptr; char str[50]; ptr = fopen("test.txt", "a+"); if (NULL == ptr) { printf("file can't be opened \n"); } printf("content of this file are \n"); while (fgets(str, 50, ptr) != NULL) { printf("%s", str); } fclose(ptr); return 0; }
Fichero de entrada:
GeeksforGeeks | A computer science portal for geeks
Producción:
fscanf()
fscanf() lee la entrada formateada de una secuencia.
Sintaxis:
int fscanf(ARCHIVO *ptr, const char *formato, …)
Acercarse:
- fscanf lee datos formateados de los archivos y los almacena en variables.
- Los datos en el búfer se imprimen en la consola hasta que se alcanza el final del archivo.
C++
// C program to implement // the above approach #include <stdio.h> // Driver code int main() { FILE* ptr = fopen("abc.txt", "r"); if (ptr == NULL) { printf("no such file."); return 0; } /* Assuming that test.txt has content in below format NAME AGE CITY abc 12 hyderbad bef 25 delhi cce 65 bangalore */ char buf[100]; while (fscanf(ptr, "%*s %*s %s ", buf) == 1) printf("%s\n", buf); return 0; }
Producción:
miedo()
fread() facilita la lectura de bloques de datos de un archivo. Por ejemplo, en el caso de leer una estructura del archivo, se convierte en un trabajo fácil de leer usando fread.
Sintaxis:
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
ptr: este es el puntero a un bloque de memoria con un tamaño mínimo de tamaño*nmemb bytes.
tamaño: Este es el tamaño en bytes de cada elemento a leer.
nmemb: Este es el número de elementos, cada uno con un tamaño de bytes de tamaño.
flujo: este es el puntero a un objeto ARCHIVO que especifica un flujo de entrada.
Acercarse:
- Primero, lee el número de conteo de objetos, cada uno con un tamaño de tamaño de bytes del flujo de entrada dado.
- La cantidad total de lecturas de bytes si se realiza correctamente es (tamaño*recuento).
- Según el nro. de caracteres leídos, la posición del archivo indicador se incrementa.
- Si los objetos leídos no se pueden copiar de forma trivial, entonces el comportamiento no está definido y si el valor de tamaño o recuento es igual a cero, entonces este programa simplemente devolverá 0.
C++
// C program to implement // the above approach #include <stdio.h> #include <stdlib.h> #include <string.h> // Structure to store // course details struct Course { char cname[30]; char sdate[30]; }; // Driver code int main() { FILE* of; of = fopen("test.txt", "w"); if (of == NULL) { fprintf(stderr, "\nError to open the file\n"); exit(1); } struct Course inp1 = { "Algorithms", "30OCT" }; struct Course inp2 = { "DataStructures", "28SEPT" }; struct Course inp3 = { "Programming", "1NOV" }; fwrite(&inp1, sizeof(struct Course), 1, of); fwrite(&inp2, sizeof(struct Course), 1, of); fwrite(&inp3, sizeof(struct Course), 1, of); if (fwrite != 0) printf("Contents to file written successfully !\n"); else printf("Error writing file !\n"); fclose(of); // File pointer to read from file FILE* inf; struct Course inp; inf = fopen("test.txt", "r"); if (inf == NULL) { fprintf(stderr, "\nError to open the file\n"); exit(1); } while (fread(&inp, sizeof(struct Course), 1, inf)) printf("Course Name = %s Started = %s\n", inp.cname, inp.sdate); fclose(inf); }
Producción:
Publicación traducida automáticamente
Artículo escrito por anujkumar20 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA