Введение
В этом лабораторном задании функция 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, чтобы улучшить свои навыки.