Оскільки Руст був порівняно новим, я бачив занадто багато способів читання та запису файлів. Багато з них є надзвичайно брудними фрагментами, які хтось придумав для свого блогу, і 99% прикладів, які я знайшов (навіть на переповнення стека), є з нестабільних конструкцій, які більше не працюють. Тепер, коли Rust стабільний, що таке простий, читабельний, не паніковий фрагмент для читання чи запису файлів?
Це найближче до мене щось, що працює з точки зору читання текстового файлу, але воно все ще не компілюється, хоча я абсолютно впевнений, що я включив усе, що мав би мати. Це засновано на фрагменті, який я знайшов у Google+ із усіх місць, і єдине, що я змінив - це те, що старий BufferedReader
зараз просто BufReader
:
use std::fs::File;
use std::io::BufReader;
use std::path::Path;
fn main() {
let path = Path::new("./textfile");
let mut file = BufReader::new(File::open(&path));
for line in file.lines() {
println!("{}", line);
}
}
Компілятор скаржиться:
error: the trait bound `std::result::Result<std::fs::File, std::io::Error>: std::io::Read` is not satisfied [--explain E0277]
--> src/main.rs:7:20
|>
7 |> let mut file = BufReader::new(File::open(&path));
|> ^^^^^^^^^^^^^^
note: required by `std::io::BufReader::new`
error: no method named `lines` found for type `std::io::BufReader<std::result::Result<std::fs::File, std::io::Error>>` in the current scope
--> src/main.rs:8:22
|>
8 |> for line in file.lines() {
|> ^^^^^
Підводячи підсумок, я шукаю:
- стислість
- читабельність
- охоплює всі можливі помилки
- не панікує
std::io::Read
), зауважте, що в Rust ви повинні імпортувати риси, які ви очікуєте використовувати явно ; таким чином, тут вам не вистачає use std::io::Read
(що могло б use std::io::{Read,BufReader}
поєднати два використання разом)