Lectura de archivos en Rust

Beginner

This tutorial is from open-source community. Access the source code

Introducción

En este laboratorio, se introduce la función open como una manera de abrir un archivo en modo de solo lectura proporcionando la ruta al archivo deseado. La función devuelve un objeto File que posee el descriptor de archivo y se encarga de cerrar el archivo cuando ya no es necesario.

Para utilizar la función open, es necesario importar los módulos necesarios, como std::fs::File, std::io::prelude::* y std::path::Path. Luego, se llama al método File::open con la ruta como argumento. Si el archivo se abre correctamente, la función devuelve un objeto Result<File, io::Error>, de lo contrario, se detiene con un mensaje de error.

Una vez que el archivo está abierto, su contenido se puede leer utilizando el método read_to_string. Este método lee el contenido del archivo en una cadena y devuelve un Result<usize, io::Error>. Si la operación de lectura es exitosa, la cadena contendrá el contenido del archivo. De lo contrario, se detiene con un mensaje de error.

En el ejemplo proporcionado, se lee el contenido del archivo hello.txt y se imprime en la consola. La característica drop se utiliza para asegurarse de que el archivo se cierre cuando el objeto file sale del ámbito.

Nota: Si el laboratorio no especifica un nombre de archivo, puede utilizar cualquier nombre de archivo que desee. Por ejemplo, puede utilizar main.rs, compilar y ejecutarlo con rustc main.rs &&./main.

open

La función open se puede utilizar para abrir un archivo en modo de solo lectura.

Un objeto File posee un recurso, el descriptor de archivo, y se encarga de cerrar el archivo cuando se lo dropea.

use std::fs::File;
use std::io::prelude::*;
use std::path::Path;

fn main() {
    // Crea una ruta al archivo deseado
    let path = Path::new("hello.txt");
    let display = path.display();

    // Abre la ruta en modo de solo lectura, devuelve `io::Result<File>`
    let mut file = match File::open(&path) {
        Err(why) => panic!("no se pudo abrir {}: {}", display, why),
        Ok(file) => file,
    };

    // Lee el contenido del archivo en una cadena, devuelve `io::Result<usize>`
    let mut s = String::new();
    match file.read_to_string(&mut s) {
        Err(why) => panic!("no se pudo leer {}: {}", display, why),
        Ok(_) => print!("{} contiene:\n{}", display, s),
    }

    // El objeto `file` sale del ámbito, y el archivo "hello.txt" se cierra
}

A continuación se muestra la salida exitosa esperada:

$ echo "Hello World!" > hello.txt
$ rustc open.rs && ./open
hello.txt contiene:
Hello World!

(Se le anima a probar el ejemplo anterior en diferentes condiciones de error: hello.txt no existe, o hello.txt no es legible, etc.)

Resumen

¡Felicitaciones! Has completado el laboratorio Open. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.