Da Rust vergleichsweise neu ist, habe ich viel zu viele Möglichkeiten zum Lesen und Schreiben von Dateien gesehen. Viele sind extrem chaotische Schnipsel, die sich jemand für sein Blog ausgedacht hat, und 99% der Beispiele, die ich gefunden habe (sogar bei Stack Overflow), stammen von instabilen Builds, die nicht mehr funktionieren. Was ist nun, da Rust stabil ist, ein einfaches, lesbares, nicht in Panik geratenes Snippet zum Lesen oder Schreiben von Dateien?
Dies ist das Beste, was ich beim Lesen einer Textdatei erreicht habe, aber es wird immer noch nicht kompiliert, obwohl ich ziemlich sicher bin, dass ich alles aufgenommen habe, was ich haben sollte. Dies basiert auf einem Ausschnitt, den ich ausgerechnet auf Google+ gefunden habe, und das einzige, was ich geändert habe, ist, dass der alte BufferedReader
jetzt nur noch ist 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);
}
}
Der Compiler beschwert sich:
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() {
|> ^^^^^
Um es zusammenzufassen, was ich suche, ist:
- Kürze
- Lesbarkeit
- deckt alle möglichen Fehler ab
- keine Panik
std::io::Read
Beachten Sie in Bezug auf den Merkmalsfehler ( ), dass Sie in Rust die Merkmale importieren müssen, die Sie voraussichtlich explizit verwenden werden . daher fehlt hier ein use std::io::Read
(was ein sein könnte, use std::io::{Read,BufReader}
um die beiden Verwendungen zusammen zu verschmelzen)