Programa C para leer el contenido de todo el archivo

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 :

  1. fgetc() : esta función se usa para leer un solo carácter del archivo.
  2. fgets() : esta función se usa para leer strings de archivos.
  3. fscanf() : esta función se utiliza para leer la entrada formateada de un archivo.
  4. 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:

output fgetc

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:

output feof

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:

Output fgets

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:

output fread

Publicación traducida automáticamente

Artículo escrito por anujkumar20 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *