Avec Rust étant relativement nouveau, j'ai vu beaucoup trop de façons de lire et d'écrire des fichiers. Beaucoup sont des extraits extrêmement désordonnés que quelqu'un a inventés pour leur blog, et 99% des exemples que j'ai trouvés (même sur Stack Overflow) proviennent de versions instables qui ne fonctionnent plus. Maintenant que Rust est stable, qu'est-ce qu'un extrait de code simple, lisible et sans panique pour lire ou écrire des fichiers?
C'est ce qui se rapproche le plus de quelque chose qui fonctionne en termes de lecture d'un fichier texte, mais il n'est toujours pas compilé même si je suis assez certain d'avoir inclus tout ce que je devrais avoir. Ceci est basé sur un extrait que j'ai trouvé sur Google+ de tous les lieux, et la seule chose que j'ai changé est que l'ancien BufferedReader
est maintenant juste 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);
}
}
Le compilateur se plaint:
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() {
|> ^^^^^
Pour résumer, ce que je recherche c'est:
- brièveté
- lisibilité
- couvre toutes les erreurs possibles
- ne panique pas
std::io::Read
), notez que dans Rust, vous devez importer les traits que vous prévoyez d'utiliser explicitement ; il vous manque donc ici un use std::io::Read
(qui pourrait être un use std::io::{Read,BufReader}
pour fusionner les deux utilisations ensemble)