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 utiliza para leer un solo carácter del archivo.
- fget() – Esta función se utiliza para leer cadenas de archivos.
- fscanf() – Esta función se utiliza para leer la entrada formateada de un archivo.
- miedo() – Esta función se utiliza para leer el bloque de bytes sin formato de 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 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 a analizar cada una de estas funciones en detalle.
cartero
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 de la secuencia 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 utilizará el bucle Do-While que leerá el carácter hasta llegar al final del archivo.
- Cuando llega al final, devuelve el carácter EOF (-1).
Usando EOF:
A continuación se muestra el programa C para implementar el enfoque anterior:
C
// C program to implement> // the above approach> #include> #include> #include> // 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
'>);> >}> >printf>(>'content of this file are
'>);> >// 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 reading.> >}>while> (ch != EOF);> >// Closing the file> >fclose>(ptr);> >return> 0;> }> |
>
>
Fichero de entrada:
techcodeview.com | 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.
Usando 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, un carácter se lee usando fgetc().
- Usando la función feof() verifique el final del archivo. ya que feof() devuelve verdadero después de llegar al final.
- Utilice el operador NOT lógico (!) para que cuando alcance la condición final se vuelva falso y se detenga el bucle.
A continuación se muestra el programa C para implementar el enfoque anterior:
C
// C program to implement> // the above approach> #include> #include> #include> // Driver code> int> main()> {> >FILE>* ptr;> >char> ch;> >ptr =>fopen>(>'test.txt'>,>'r'>);> >if> (NULL == ptr) {> >printf>(>'file can't be opened
'>);> >}> >printf>(>'content of this file are
'>);> >while> (!>feof>(ptr)) {> >ch =>fgetc>(ptr);> >printf>(>'%c'>, ch);> >}> >fclose>(ptr);> >return> 0;> }> |
>
>
Fichero de entrada:
techcodeview.com | A computer science portal for geeks>
Producción:
fget()
fgets() lee una cadena a la vez del archivo. fgets() devuelve una cadena si la función la lee correctamente o devuelve NULL si no se puede leer.
Sintaxis:
char * fgets(char *cadena, int tamaño, ARCHIVO * ptr);
Aquí,
cadena: Es una cadena en la que fgets() almacena la cadena después de leerla del archivo.
tamaño: Es el máximo de caracteres para leer de la secuencia.
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> #include> #include> // Driver code> int> main()> {> >FILE>* ptr;> >char> str[50];> >ptr =>fopen>(>'test.txt'>,>'a+'>);> >if> (NULL == ptr) {> >printf>(>'file can't be opened
'>);> >}> >printf>(>'content of this file are
'>);> >while> (>fgets>(str, 50, ptr) != NULL) {> >printf>(>'%s'>, str);> >}> >fclose>(ptr);> >return> 0;> }> |
>
>
Fichero de entrada:
techcodeview.com | 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 del búfer se imprimen en la consola hasta llegar al final del archivo.
C++
recorrido previo al pedido de un árbol
// C program to implement> // the above approach> #include> // 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
'>, 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, resulta fácil leerlo usando fread.
Sintaxis:
size_t fread(void *ptr, size_t tamaño, size_t nmemb, ARCHIVO *flujo)
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.
arroyo: Este es el puntero a un objeto ARCHIVO que especifica una secuencia de entrada.
Acercarse:
- Primero, lee el número de objetos, cada uno con un tamaño de bytes del flujo de entrada dado.
- La cantidad total de bytes leídos si se realiza correctamente es (tamaño*recuento).
- Según el núm. de caracteres leídos, se incrementa la posición del archivo indicador.
- Si los objetos leídos no se pueden copiar trivialmente, 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> #include> #include> // 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,> >'
Error to open the file
'>);> >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 !
'>);> >else> >printf>(>'Error writing file !
'>);> >fclose>(of);> >// File pointer to read from file> >FILE>* inf;> >struct> Course inp;> >inf =>fopen>(>'test.txt'>,>'r'>);> >if> (inf == NULL) {> >fprintf>(stderr,> >'
Error to open the file
'>);> >exit>(1);> >}> >while> (>fread>(&inp,>sizeof>(>struct> Course),> >1, inf))> >printf>(>'Course Name = %s Started = %s
'>,> >inp.cname, inp.sdate);> >fclose>(inf);> }> |
>
>
Producción: