Чтение файлов в Rust

Beginner

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

Введение

В этом лабораторном задании функция open представлена в качестве способа открытия файла в режиме только для чтения путём указания пути к нужному файлу. Функция возвращает объект File, который владеет дескриптором файла и заботится о закрытии файла, когда он больше не нужен.

Для использования функции open необходимо импортировать необходимые модули, такие как std::fs::File, std::io::prelude::* и std::path::Path. Затем вызывается метод File::open с путём в качестве аргумента. Если файл успешно открыт, функция возвращает объект Result<File, io::Error>, в противном случае она завершается с ошибкой с сообщением об ошибке.

После того, как файл открыт, его содержимое можно прочитать с использованием метода read_to_string. Этот метод считывает содержимое файла в строку и возвращает Result<usize, io::Error>. Если операция чтения прошла успешно, в строке будут содержаться данные файла. В противном случае она завершается с ошибкой с сообщением об ошибке.

В приведённом примере содержимое файла hello.txt считывается и выводится на консоль. Трейт drop используется для обеспечения закрытия файла, когда объект file выходит из области видимости.

Примечание: Если лабораторная работа не уточняет имя файла, вы можете использовать любое имя файла, которое хотите. Например, вы можете использовать main.rs, скомпилировать и запустить его с помощью rustc main.rs &&./main.

open

Функция open может быть использована для открытия файла в режиме только для чтения.

Объект File владеет ресурсом, дескриптором файла, и заботится о закрытии файла, когда он выходит из области видимости (drop).

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

fn main() {
    // Создаём путь к нужному файлу
    let path = Path::new("hello.txt");
    let display = path.display();

    // Открываем путь в режиме только для чтения, возвращает `io::Result<File>`
    let mut file = match File::open(&path) {
        Err(why) => panic!("не удалось открыть {}: {}", display, why),
        Ok(file) => file,
    };

    // Считываем содержимое файла в строку, возвращает `io::Result<usize>`
    let mut s = String::new();
    match file.read_to_string(&mut s) {
        Err(why) => panic!("не удалось прочитать {}: {}", display, why),
        Ok(_) => print!("{} содержит:\n{}", display, s),
    }

    // Объект `file` выходит из области видимости, и файл "hello.txt" закрывается
}

Вот ожидаемый успешный вывод:

$ echo "Hello World!" > hello.txt
$ rustc open.rs && ./open
hello.txt содержит:
Hello World!

(Рекомендуется протестировать предыдущий пример при различных условиях ошибок: файл hello.txt не существует, или файл hello.txt не доступен для чтения и т.д.)

Резюме

Поздравляем! Вы завершили лабораторную работу Open. Вы можете практиковаться в других лабораторных работах в LabEx, чтобы улучшить свои навыки.