Rustは比較的新しいため、ファイルを読み書きする方法が多すぎます。多くは、誰かがブログのために思いついた非常に厄介なスニペットであり、私が見つけた例の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}
2つの用途を結合するためのa になる可能性があります)