logo

Conceptos básicos del manejo de archivos en C

La entrega de archivos en C es el proceso en el que creamos, abrimos, leemos, escribimos y cerramos operaciones en un archivo. El lenguaje C proporciona diferentes funciones como fopen(), fwrite(), fread(), fseek(), fprintf(), etc. para realizar entradas, salidas y muchas operaciones diferentes de archivos C en nuestro programa.

¿Por qué necesitamos el manejo de archivos en C?

Hasta ahora, las operaciones que utilizan el programa C se realizan en un indicador/terminal que no está almacenado en ningún lugar. La salida se elimina cuando se cierra el programa. Pero en la industria del software, la mayoría de los programas están escritos para almacenar la información obtenida del programa. El uso del manejo de archivos es exactamente lo que requiere la situación.



Para comprender por qué es importante el manejo de archivos, veamos algunas características del uso de archivos:

  • Reutilizabilidad: Se puede acceder, actualizar y eliminar los datos almacenados en el archivo en cualquier lugar y en cualquier momento, lo que proporciona una alta reutilización.
  • Portabilidad: Sin perder ningún dato, los archivos se pueden transferir a otro en el sistema informático. El riesgo de codificación defectuosa se minimiza con esta función.
  • Eficiente: Es posible que algunos programas requieran una gran cantidad de información. El manejo de archivos le permite acceder fácilmente a una parte de un archivo utilizando pocas instrucciones, lo que ahorra mucho tiempo y reduce la posibilidad de errores.
  • Capacidad de almacenamiento: Los archivos te permiten almacenar una gran cantidad de datos sin tener que preocuparte por almacenar todo simultáneamente en un programa.

Tipos de archivos en C

Un archivo se puede clasificar en dos tipos según la forma en que almacena los datos. Son los siguientes:

  • Archivos de texto
  • Archivos binarios



1. Archivos de texto

Un archivo de texto contiene datos en el forma de caracteres ASCII y generalmente se usa para almacenar una secuencia de caracteres.

  • Cada línea de un archivo de texto termina con un carácter de nueva línea (' ').
  • Puede ser leído o escrito por cualquier editor de texto.
  • Generalmente se almacenan con .TXT extensión de archivo.
  • Los archivos de texto también se pueden utilizar para almacenar el código fuente.

2. Archivos binarios

Un archivo binario contiene datos en forma binaria (es decir, 0 y 1) en lugar de caracteres ASCII. Contienen datos que se almacenan de manera similar a como se almacenan en la memoria principal.

  • Los archivos binarios sólo se pueden crear desde un programa y su contenido sólo puede ser leído por un programa.
  • Más seguros ya que no son fácilmente legibles.
  • Generalmente se almacenan con .papelera extensión de archivo.

Operaciones de archivos C

Las operaciones de archivos C se refieren a las diferentes operaciones posibles que podemos realizar sobre un archivo en C como por ejemplo:



  1. Creando un nuevo archivo – fopen() con atributos como a o a+ o w o w+
  2. Abrir un archivo existente – abrir()
  3. Lectura de archivo – fscanf() o fgets()
  4. Escribir en un archivo – fprintf() o fputs()
  5. Moverse a una ubicación específica en un archivo – fbúsqueda() , rebobinar()
  6. Cerrar un archivo – cerrar()

El texto resaltado menciona la función C utilizada para realizar las operaciones del archivo.

Funciones para operaciones de archivos C

manejo de archivos en c

Puntero de archivo en C

Un puntero de archivo es una referencia a una posición particular en el archivo abierto. Se utiliza en el manejo de archivos para realizar todas las operaciones de archivos, como leer, escribir, cerrar, etc. Usamos el ARCHIVO macro para declarar la variable de puntero del archivo. La macro ARCHIVO está definida dentro archivo de cabecera.

Sintaxis del puntero de archivo

  FILE*     pointer_name  ;>

File Pointer se utiliza en casi todas las operaciones de archivos en C.

Abrir un archivo en C

Para abrir un archivo en C, el abrir() La función se utiliza con el nombre del archivo o la ruta del archivo junto con los modos de acceso requeridos.

Sintaxis de fopen()

FILE*   fopen  (const char *  file_name  , const char *  access_mode  );>

Parámetros

  • Nombre del archivo : nombre del archivo cuando está presente en el mismo directorio que el archivo fuente. En caso contrario, camino completo.
  • modo de acceso: Especifica para qué operación se abre el archivo.

Valor de retorno

  • Si el archivo se abre correctamente, devuelve un puntero de archivo.
  • Si el archivo no se abre, devuelve NULL.

Modos de apertura de archivos en C

Los modos de apertura de archivos o modos de acceso especifican las operaciones permitidas en el archivo que se va a abrir. Se pasan como argumento a la función fopen(). Algunos de los modos de acceso a archivos más utilizados se enumeran a continuación:

Modos de apertura Descripción
r Archivo de búsquedas. Si el archivo se abre con éxito, fopen() lo carga en la memoria y configura un puntero que apunta al primer carácter que contiene. Si el archivo no se puede abrir, fopen() devuelve NULL.
rb Abierto para lectura en modo binario. Si el archivo no existe, fopen() devuelve NULL.
En Abierto para escribir en modo texto. Si el archivo existe, su contenido se sobrescribe. Si el archivo no existe, se crea un archivo nuevo. Devuelve NULL, si no se puede abrir el archivo.
wb Abierto para escribir en modo binario. Si el archivo existe, su contenido se sobrescribe. Si el archivo no existe, se creará.
a Archivo de búsquedas. Si el archivo se abre con éxito, fopen() lo carga en la memoria y configura un puntero que apunta al último carácter que contiene. Se abre sólo en el modo de agregar. Si el archivo no existe, se crea un archivo nuevo. Devuelve NULL, si no se puede abrir el archivo.
ab Abierto para agregar en modo binario. Los datos se agregan al final del archivo. Si el archivo no existe, se creará.
r+ Archivo de búsquedas. Se abre con éxito fopen() lo carga en la memoria y configura un puntero que apunta al primer carácter que contiene. Devuelve NULL, si no se puede abrir el archivo.
rb+ Abierto para lectura y escritura en modo binario. Si el archivo no existe, fopen() devuelve NULL.
w+ Archivo de búsquedas. Si el archivo existe, su contenido se sobrescribe. Si el archivo no existe, se crea un archivo nuevo. Devuelve NULL, si no se puede abrir el archivo.
wb+ Abierto para lectura y escritura en modo binario. Si el archivo existe, su contenido se sobrescribe. Si el archivo no existe, se creará.
un+ Archivo de búsquedas. Si el archivo se abre con éxito, fopen() lo carga en la memoria y configura un puntero que apunta al último carácter que contiene. Abre el archivo en modo lectura y anexado. Si el archivo no existe, se crea un archivo nuevo. Devuelve NULL, si no se puede abrir el archivo.
ab+ Abierto para lectura y adición en modo binario. Si el archivo no existe, se creará.

Como se indicó anteriormente, si desea realizar operaciones en un archivo binario, debe agregar 'b' al final. Por ejemplo, en lugar de w, tienes que usar wb, en lugar de a+ tienes que usar a+b.

Ejemplo de apertura de un archivo

C




// C Program to illustrate file opening> #include> #include> int> main()> {> >// file pointer variable to store the value returned by> >// fopen> >FILE>* fptr;> >// opening the file in read mode> >fptr =>fopen>(>'filename.txt'>,>'r'>);> >// checking if the file is opened successfully> >if> (fptr == NULL) {> >printf>(>'The file is not opened. The program will '> >'now exit.'>);> >exit>(0);> >}> >return> 0;> }>

>

número primo en java

>

Producción

The file is not opened. The program will now exit.>

El archivo no se abre porque no existe en el directorio de origen. Pero la función fopen() también es capaz de crear un archivo si no existe. Se muestra a continuación

Crear un archivo en C

La función fopen() no sólo puede abrir un archivo sino que también puede crear un archivo si aún no existe. Para eso, tenemos que usar los modos que permiten la creación de un archivo si no se encuentra como w, w+, wb, wb+, a, a+, ab y ab+.

FILE *fptr; fptr =   fopen  ('  filename.txt  ', '  w  ');>

Ejemplo de apertura de un archivo

C




// C Program to create a file> #include> #include> int> main()> {> >// file pointer> >FILE>* fptr;> >// creating file using fopen() access mode 'w'> >fptr =>fopen>(>'file.txt'>,>'w'>);> >// checking if the file is created> >if> (fptr == NULL) {> >printf>(>'The file is not opened. The program will '> >'exit now'>);> >exit>(0);> >}> >else> {> >printf>(>'The file is created Successfully.'>);> >}> > >return> 0;> }>

>

>

Producción

The file is created Successfully.>

Lectura de un archivo

La operación de lectura de archivos en C se puede realizar utilizando las funciones fscanf() o fgets(). Ambas funciones realizaron las mismas operaciones que scanf y get pero con un parámetro adicional, el puntero de archivo. También hay otras funciones que podemos usar para leer un archivo. Dichas funciones se enumeran a continuación:

Función Descripción
fscanf() Utilice una cadena formateada y una lista de argumentos variables para recibir información de un archivo.
fget() Ingrese la línea completa del archivo.
fgetc() Lee un solo carácter del archivo.
conseguir() Lee un número de un archivo.
miedo() Lee los bytes de datos especificados de un archivo binario.

Entonces, depende de usted si desea leer el archivo línea por línea o carácter por carácter.

Ejemplo:

FILE * fptr;  fptr = fopen(fileName.txt, r); fscanf(fptr, '%s %s %s %d', str1, str2, str3, &year); char c = fgetc(fptr);>

getc() y algunas otras funciones de lectura de archivos devuelven EOF (Fin del archivo) cuando llegan al final del archivo durante la lectura. EOF indica el final del archivo y su valor está definido por la implementación.

Nota: Una cosa a tener en cuenta aquí es que después de leer una parte particular del archivo, el puntero del archivo se moverá automáticamente al final del último carácter leído.

Escribir en un archivo

Las operaciones de escritura de archivos se pueden realizar mediante las funciones fprintf() y fputs() con similitudes con las operaciones de lectura. La programación en C también proporciona algunas otras funciones que se pueden utilizar para escribir datos en un archivo, como por ejemplo:

Función Descripción
fprintf() Similar a printf(), esta función utiliza una cadena formateada y una lista de argumentos variables para imprimir la salida en el archivo.
entradas() Imprime toda la línea del archivo y una nueva línea al final.
fputc() Imprime un solo carácter en el archivo.
fput() Imprime un número en el archivo.
escribir() Esta función escribe la cantidad especificada de bytes en el archivo binario.

Ejemplo:

FILE *fptr ;  fptr = fopen(fileName.txt, w); fprintf(fptr, '%s %s %s %d', 'We', 'are', 'in', 2012); fputc('a', fptr);>

Cerrar un archivo

La función fclose() se utiliza para cerrar el archivo. Después de operaciones exitosas con archivos, siempre debe cerrar un archivo para eliminarlo de la memoria.

Sintaxis de fclose()

  fclose  (  file_pointer  );>

donde el puntero_archivo es el puntero al archivo abierto.

Ejemplo:

FILE *fptr ; fptr= fopen(fileName.txt, w); ----------   Some file Operations   ------- fclose(fptr);>

Ejemplos de entrega de archivos en C

Ejemplo 1: Programa para crear un archivo, escribir en él y cerrar el archivo

C




// C program to Open a File,> // Write in it, And Close the File> #include> #include> int> main()> {> >// Declare the file pointer> >FILE>* filePointer;> >// Get the data to be written in file> >char> dataToBeWritten[50] =>'techcodeview.com-A Computer '> >'Science Portal for Geeks'>;> >// Open the existing file GfgTest.c using fopen()> >// in write mode using 'w' attribute> >filePointer =>fopen>(>'GfgTest.c'>,>'w'>);> >// Check if this filePointer is null> >// which maybe if the file does not exist> >if> (filePointer == NULL) {> >printf>(>'GfgTest.c file failed to open.'>);> >}> >else> {> >printf>(>'The file is now opened. '>);> >// Write the dataToBeWritten into the file> >if> (>strlen>(dataToBeWritten)>0) {> >// writing in the file using fputs()> >fputs>(dataToBeWritten, filePointer);> >fputs>(>' '>, filePointer);> >}> >// Closing the file using fclose()> >fclose>(filePointer);> >printf>(>'Data successfully written in file '> >'GfgTest.c '>);> >printf>(>'The file is now closed.'>);> >}> > >return> 0;> }>

>

dependencia parcial

>

Producción

The file is now opened. Data successfully written in file GfgTest.c The file is now closed.>

Este programa creará un archivo llamado GfgTest.c en el mismo directorio que el archivo fuente que contendrá el siguiente texto: techcodeview.com-Un portal de informática para geeks.

Ejemplo 2: Programa para abrir un archivo, leerlo y cerrarlo

C




// C program to Open a File,> // Read from it, And Close the File> #include> #include> int> main()> {> >// Declare the file pointer> >FILE>* filePointer;> >// Declare the variable for the data to be read from> >// file> >char> dataToBeRead[50];> >// Open the existing file GfgTest.c using fopen()> >// in read mode using 'r' attribute> >filePointer =>fopen>(>'GfgTest.c'>,>'r'>);> >// Check if this filePointer is null> >// which maybe if the file does not exist> >if> (filePointer == NULL) {> >printf>(>'GfgTest.c file failed to open.'>);> >}> >else> {> >printf>(>'The file is now opened. '>);> >// Read the dataToBeRead from the file> >// using fgets() method> >while> (>fgets>(dataToBeRead, 50, filePointer)> >!= NULL) {> >// Print the dataToBeRead> >printf>(>'%s'>, dataToBeRead);> >}> >// Closing the file using fclose()> >fclose>(filePointer);> >printf>(> >'Data successfully read from file GfgTest.c '>);> >printf>(>'The file is now closed.'>);> >}> >return> 0;> }>

>

>

Producción

The file is now opened. techcodeview.com-A Computer Science Portal for Geeks Data successfully read from file GfgTest.c The file is now closed.>

Este programa lee el texto del archivo llamado GfgTest.c que creamos en el ejemplo anterior y lo imprime en la consola.

Leer y escribir en un archivo binario

Hasta ahora, sólo hemos analizado las operaciones con archivos de texto. Las operaciones en un archivo binario son similares a las operaciones con archivos de texto con poca diferencia.

Abrir un archivo binario

Para abrir un archivo en modo binario, usamos el modo de acceso rb, rb+, ab, ab+, wb y wb+ en la función fopen(). También utilizamos la extensión de archivo .bin en el nombre del archivo binario.

Ejemplo

fptr = fopen('filename.bin', 'rb');>

Escribir en un archivo binario

Usamos la función fwrite() para escribir datos en un archivo binario. Los datos se escriben en el archivo binario en forma de bits (0 y 1).

Sintaxis de fwrite()

size_t   fwrite  (const void *  ptr  , size_t   size  , size_t   nmemb  , FILE *  file_pointer  );>

Parámetros:

  • ptr: puntero al bloque de memoria que se va a escribir.
  • tamaño: Tamaño de cada elemento a escribir (en bytes).
  • nmemb: número de elementos.
  • puntero_archivo : puntero de ARCHIVO a la secuencia del archivo de salida.

Valor de retorno:

  • Número de objetos escritos.

Ejemplo: Programa para escribir en un archivo binario usando fwrite()

C




// C program to write to a Binary file using fwrite()> #include> #include> struct> threeNum {> >int> n1, n2, n3;> };> int> main()> {> >int> n;> >// Structure variable declared here.> >struct> threeNum num;> >FILE>* fptr;> >if> ((fptr =>fopen>(>'C:program.bin'>,>'wb'>)) == NULL) {> >printf>(>'Error! opening file'>);> >// If file pointer will return NULL> >// Program will exit.> >exit>(1);> >}> >int> flag = 0;> >// else it will return a pointer to the file.> >for> (n = 1; n <5; ++n) {> >num.n1 = n;> >num.n2 = 5 * n;> >num.n3 = 5 * n + 1;> >flag =>fwrite>(&num,>sizeof>(>struct> threeNum), 1,> >fptr);> >}> >// checking if the data is written> >if> (!flag) {> >printf>(>'Write Operation Failure'>);> >}> >else> {> >printf>(>'Write Operation Successful'>);> >}> >fclose>(fptr);> > >return> 0;> }>

>

>

Producción

Write Operation Successful>

Lectura de un archivo binario

La función fread() se puede utilizar para leer datos de un archivo binario en C. Los datos se leen del archivo en la misma forma en que se almacenan, es decir, en formato binario.

Sintaxis de fread()

size_t   fread  (void *  ptr  , size_t   size  , size_t   nmemb  , FILE *  file_pointer  );>

Parámetros:

  • ptr: puntero al bloque de memoria a leer.
  • tamaño: el tamaño de cada elemento a leer (en bytes).
  • nmemb: número de elementos.
  • puntero_archivo : puntero de ARCHIVO a la secuencia del archivo de entrada.

Valor de retorno:

  • Número de objetos escritos.

Ejemplo: Programa para leer desde un archivo binario usando fread()

C




// C Program to Read from a binary file using fread()> #include> #include> struct> threeNum {> >int> n1, n2, n3;> };> int> main()> {> >int> n;> >struct> threeNum num;> >FILE>* fptr;> >if> ((fptr =>fopen>(>'C:program.bin'>,>'rb'>)) == NULL) {> >printf>(>'Error! opening file'>);> >// If file pointer will return NULL> >// Program will exit.> >exit>(1);> >}> >// else it will return a pointer to the file.> >for> (n = 1; n <5; ++n) {> >fread>(&num,>sizeof>(>struct> threeNum), 1, fptr);> >printf>(>'n1: %d n2: %d n3: %d '>, num.n1, num.n2,> >num.n3);> >}> >fclose>(fptr);> >return> 0;> }>

>

>

Producción

n1: 1 n2: 5 n3: 6 n1: 2 n2: 10 n3: 11 n1: 3 n2: 15 n3: 16 n1: 4 n2: 20 n3: 21>

fseek() en C

Si tenemos varios registros dentro de un archivo y necesitamos acceder a un registro en particular que se encuentra en una posición específica, debemos recorrer todos los registros anteriores para obtener el registro. Hacer esto desperdiciará mucha memoria y tiempo operativo. Para reducir el consumo de memoria y el tiempo operativo podemos utilizar fbúsqueda() lo que proporciona una manera más fácil de llegar a los datos requeridos. La función fseek() en C busca el cursor hacia el registro dado en el archivo.

Sintaxis de fseek()

int fseek(FILE *ptr, long int offset, int pos);>

Ejemplo de fseek()

C




// C Program to demonstrate the use of fseek() in C> #include> int> main()> {> >FILE>* fp;> >fp =>fopen>(>'test.txt'>,>'r'>);> >// Moving pointer to end> >fseek>(fp, 0, SEEK_END);> >// Printing position of pointer> >printf>(>'%ld'>,>ftell>(fp));> >return> 0;> }>

>

>

Producción

81>

rebobinar() en C

El rebobinar() La función se utiliza para llevar el puntero del archivo al principio del archivo. Se puede utilizar en lugar de fseek() cuando desee el puntero del archivo al principio.

Sintaxis de rebobinar()

  rewind   (  file_pointer  );>

Ejemplo

C


java cómo anular



// C program to illustrate the use of rewind> #include> int> main()> {> >FILE>* fptr;> >fptr =>fopen>(>'file.txt'>,>'w+'>);> >fprintf>(fptr,>'Geeks for Geeks '>);> >// using rewind()> >rewind>(fptr);> >// reading from file> >char> buf[50];> >fscanf>(fptr,>'%[^ ]s'>, buf);> >printf>(>'%s'>, buf);> >return> 0;> }>

>

>

Producción

Geeks for Geeks>

Más funciones para operaciones de archivos C

La siguiente tabla enumera algunas funciones más que se pueden utilizar para realizar operaciones con archivos o ayudar a realizarlas.

Funciones Descripción
abrir() Se utiliza para crear un archivo o para abrir un archivo.
cerrar() Se utiliza para cerrar un archivo.
fget() Se utiliza para leer un archivo.
fprintf() Se utiliza para escribir bloques de datos en un archivo.
fscanf() Se utiliza para leer bloques de datos de un archivo.
obtenerc() Se utiliza para leer un solo carácter en un archivo.
putc() Se utiliza para escribir un solo carácter en un archivo.
fbúsqueda() Se utiliza para establecer la posición de un puntero de archivo en una ubicación mencionada.
ftell() Se utiliza para devolver la posición actual de un puntero de archivo.
rebobinar() Se utiliza para establecer el puntero del archivo al principio de un archivo.
poner() Se utiliza para escribir un número entero en un archivo.
obtener W() Se utiliza para leer un número entero de un archivo.