Programación de computadoras - E / S de archivos

Archivos de computadora

Un archivo de computadora se utiliza para almacenar datos en formato digital como texto sin formato, datos de imágenes o cualquier otro contenido. Los archivos de computadora se pueden organizar dentro de diferentes directorios. Los archivos se usan para guardar datos digitales, mientras que los directorios se usan para guardar archivos.

Los archivos informáticos pueden considerarse la contraparte digital de los documentos en papel. Mientras programa, mantiene su código fuente en archivos de texto con diferentes extensiones, por ejemplo, los archivos de programación C terminan con la extensión.c, Archivos de programación Java con .javay archivos Python con .py.

Entrada / salida de archivos

Por lo general, crea archivos utilizando editores de texto como bloc de notas, MS Word, MS Excel o MS Powerpoint, etc. Sin embargo, muchas veces, también necesitamos crear archivos utilizando programas de computadora. Podemos modificar un archivo existente usando un programa de computadora.

La entrada de archivo significa datos que se escriben en un archivo y la salida de archivo significa datos que se leen de un archivo. En realidad, los términos de entrada y salida están más relacionados con la entrada y salida de la pantalla. Cuando mostramos un resultado en la pantalla, se llama salida. De manera similar, si proporcionamos alguna entrada a nuestro programa desde el símbolo del sistema, entonces se llama entrada.

Por ahora, es suficiente recordar que escribir en un archivo es entrada de archivo y leer algo de un archivo es salida de archivo.

Modos de operación de archivos

Antes de comenzar a trabajar con cualquier archivo usando un programa de computadora, necesitamos crear un nuevo archivo si no existe o abrir un archivo ya existente. En cualquier caso, podemos abrir un archivo en los siguientes modos:

  • Read-Only Mode- Si solo va a leer un archivo existente y no desea escribir más contenido en el archivo, entonces abrirá el archivo en modo de solo lectura. Casi todos los lenguajes de programación proporcionan sintaxis para abrir archivos en modo de solo lectura.

  • Write-Only Mode- Si va a escribir en un archivo existente o en un archivo recién creado pero no desea leer ningún contenido escrito de ese archivo, entonces abrirá el archivo en modo de solo escritura. Todos los lenguajes de programación proporcionan sintaxis para abrir archivos en modo de solo escritura.

  • Read & Write Mode - Si va a leer y escribir en el mismo archivo, entonces abrirá el archivo en modo lectura y escritura.

  • Append Mode- Cuando abre un archivo para escribir, le permite comenzar a escribir desde el principio del archivo; sin embargo, sobrescribirá el contenido existente, si lo hubiera. Supongamos que no queremos sobrescribir ningún contenido existente, luego abrimos el archivo en modo adjuntar. El modo de anexar es, en última instancia, un modo de escritura, que permite que el contenido se agregue al final del archivo. Casi todos los lenguajes de programación proporcionan sintaxis para abrir archivos en modo adjunto.

En las siguientes secciones, aprenderemos cómo abrir un archivo nuevo, cómo escribir en él y, más adelante, cómo leer y agregar más contenido en el mismo archivo.

Abrir archivos

Puedes usar el fopen()función para crear un nuevo archivo o para abrir un archivo existente. Esta llamada inicializará un objeto del tipoFILE, que contiene toda la información necesaria para controlar la transmisión. Aquí está el prototipo, es decir, la firma de esta llamada a función:

FILE *fopen( const char * filename, const char * mode );

Aquí, filename es literal de cadena, que utilizará para nombrar su archivo y acceder mode puede tener uno de los siguientes valores:

No Señor Modo y descripción
1

r

Abre un archivo de texto existente con fines de lectura.

2

w

Abre un archivo de texto para escribir. Si no existe, se crea un nuevo archivo. Aquí, su programa comenzará a escribir contenido desde el principio del archivo.

3

a

Abre un archivo de texto para escribir en modo adjunto. Si no existe, se crea un nuevo archivo. Aquí, su programa comenzará a agregar contenido en el contenido del archivo existente.

4

r+

Abre un archivo de texto para leer y escribir ambos.

5

w+

Abre un archivo de texto para leer y escribir. Primero trunca el archivo a una longitud cero, si existe; de lo contrario, crea el archivo si no existe.

6

a+

Abre un archivo de texto para leer y escribir. Crea un archivo, si no existe. La lectura comenzará desde el principio, pero la escritura solo se puede agregar.

Cerrar un archivo

Para cerrar un archivo, use el fclose( )función. El prototipo de esta función es:

int fclose( FILE *fp );

los fclose( ) la función devuelve cero en caso de éxito, o EOF, carácter especial, si hay un error al cerrar el archivo. Esta función en realidad vacía cualquier dato aún pendiente en el búfer al archivo, cierra el archivo y libera la memoria utilizada para el archivo. El EOF es una constante definida en el archivo de encabezadostdio.h.

Hay varias funciones proporcionadas por la biblioteca estándar de C para leer y escribir un archivo carácter por carácter o en forma de una cadena de longitud fija. Veamos algunos de ellos en la siguiente sección.

Escribir un archivo

A continuación se muestra la función más simple para escribir caracteres individuales en una secuencia:

int fputc( int c, FILE *fp );

La función fputc() escribe el valor de carácter del argumento c en el flujo de salida al que hace referencia fp. Devuelve el carácter escrito escrito en el éxito, de lo contrarioEOFsi hay un error. Puede utilizar las siguientes funciones para escribir una cadena terminada en nulo en una secuencia:

int fputs( const char *s, FILE *fp );

La función fputs() escribe la cadena sen el archivo al que hace referencia fp. Devuelve un valor no negativo en caso de éxito, de lo contrarioEOFse devuelve en caso de cualquier error. También puede utilizar la funciónint fprintf(FILE *fp,const char *format, ...)para escribir una cadena en un archivo. Prueba el siguiente ejemplo:

#include <stdio.h>

int main() {
   FILE *fp;

   fp = fopen("/tmp/test.txt", "w+");
   fprintf(fp, "This is testing for fprintf...\n");
   fputs("This is testing for fputs...\n", fp);
   fclose(fp);
}

Cuando se compila y ejecuta el código anterior, crea un nuevo archivo test.txt en /tmpdirectorio y escribe dos líneas usando dos funciones diferentes. Leamos este archivo en la siguiente sección.

Leer un archivo

A continuación se muestra la función más simple para leer un archivo de texto carácter por carácter:

int fgetc( FILE * fp );

los fgetc() La función lee un carácter del archivo de entrada al que hace referencia fp. El valor de retorno es el carácter leído; o en caso de cualquier error, devuelveEOF. La siguiente función le permite leer una cadena de una secuencia:

char *fgets( char *buf, int n, FILE *fp );

La función fgets() lee hasta n - 1 caracteres del flujo de entrada referenciado por fp. Copia la cadena de lectura en el búferbuf, agregando un null carácter para terminar la cadena.

Si esta función encuentra un carácter de nueva línea '\ n' o EOF antes de que hayan leído el número máximo de caracteres, solo devuelve los caracteres leídos hasta ese punto, incluido el carácter de nueva línea. También puedes usarint fscanf(FILE *fp, const char *format, ...) para leer cadenas de un archivo, pero deja de leer después de encontrar el primer carácter de espacio.

#include <stdio.h>

main() {

   FILE *fp;
   char buff[255];

   fp = fopen("/tmp/test.txt", "r");
   fscanf(fp, "%s", buff);
   printf("1 : %s\n", buff );

   fgets(buff, 255, (FILE*)fp);
   printf("2: %s\n", buff );
   
   fgets(buff, 255, (FILE*)fp);
   printf("3: %s\n", buff );
   fclose(fp);
}

Cuando se compila y ejecuta el código anterior, lee el archivo creado en la sección anterior y produce el siguiente resultado:

1 : This
2 : is testing for fprintf...

3 : This is testing for fputs...

Analicemos lo que pasó aquí. Primero elfscanf() el método lee Thisporque después de eso, encontró un espacio. La segunda convocatoria es parafgets(), que lee la línea restante hasta que encuentra el final de la línea. Finalmente, la última llamadafgets() lee la segunda línea por completo.

E / S de archivos en Java

Java proporciona un conjunto de funciones aún más completo para manejar E / S de archivos. Para obtener más información sobre este tema, le sugerimos que consulte nuestros Tutoriales de Java.

Aquí, veremos un programa Java simple, que es equivalente al programa C explicado anteriormente. Este programa abrirá un archivo de texto, escribirá algunas líneas de texto en él y cerrará el archivo. Finalmente, se abre el mismo archivo y luego se lee de un archivo ya creado. Puede intentar ejecutar el siguiente programa para ver el resultado:

import java.io.*;

public class DemoJava {
   public static void main(String []args) throws IOException {
      File file = new File("/tmp/java.txt");
      
      // Create a File
      file.createNewFile();
      
      //  Creates a FileWriter Object using file object
      FileWriter writer = new FileWriter(file); 
      
      // Writes the content to the file
      writer.write("This is testing for Java write...\n");
      writer.write("This is second line...\n");
      
      // Flush the memory and close the file
      writer.flush();
      writer.close();
      
      // Creates a FileReader Object
      FileReader reader = new FileReader(file); 
      char [] a = new char[100];
      
      // Read file content in the array
      reader.read(a);
      System.out.println( a );
      
      // Close the file
      reader.close();
   }
}

Cuando se ejecuta el programa anterior, produce el siguiente resultado:

This is testing for Java write...
This is second line...

E / S de archivos en Python

El siguiente programa muestra la misma funcionalidad para abrir un nuevo archivo, escribir algo de contenido en él y, finalmente, leer el mismo archivo:

# Create a new file
fo = open("/tmp/python.txt", "w")

# Writes the content to the file
fo.write( "This is testing for Python write...\n");
fo.write( "This is second line...\n");

# Close the file
fo.close()

# Open existing file
fo = open("/tmp/python.txt", "r")

# Read file content in a variable
str = fo.read(100);
print str

# Close opened file
fo.close()

Cuando se ejecuta el código anterior, produce el siguiente resultado:

This is testing for Python write...
This is second line...