#12 Rustで学ぶファイル読み書きの基本
Rustのファイル操作は、標準ライブラリのstd::fsを使い、失敗する可能性をResult型で表すという、Rustらしい設計になっています。この記事では、Rustにおけるファイル操作の基本を解説します。
ファイルを読み込む
use std::fs;
let content = fs::read_to_string("data.txt").expect("読み込みに失敗しました");
println!("{}", content);
read_to_stringという機能を使うと、1行で内容を読み込めます。戻り値はResult型のため、expectなどで結果を確認する必要があります。
ファイルに書き込む
fs::write("data.txt", "こんにちは").expect("書き込みに失敗しました");
既存の内容に追記したい場合は、OpenOptionsという機能を使ってファイルを開くモードを指定します。
エラーを丁寧に扱う
実際のプログラムでは、expect(失敗したら即座に停止)ではなく、matchを使って丁寧にエラーを扱うことが推奨されます。
match fs::read_to_string("data.txt") {
Ok(content) => println!("{}", content),
Err(e) => println!("エラー: {}", e),
}
?演算子で簡潔にエラーを伝播する
エラーが起きたらすぐに呼び出し元へ伝えたい場合、?という演算子を使うとmatchを書かずに簡潔に表現できます。
fn read_file() -> Result {
let content = fs::read_to_string("data.txt")?;
Ok(content)
}
?を付けた式がErrだった場合、その場で関数から抜けてエラーがそのまま返されます。matchを毎回書く手間を省ける、Rustでよく使われるイディオムです。
Rustならではの注意点
ファイルが存在しない、権限がないなど、ファイル操作には失敗する可能性がつきものです。Rustでは、これらの失敗をResult型として明示的に扱うことが求められるため、「ファイルがなかったらどうするか」を必ず考えながらコードを書くことになります。
まとめ
Rustのファイル操作はstd::fsが基本で、結果はResult型として扱います。?演算子による簡潔なエラー伝播も含め、失敗を前提に丁寧なエラー処理を書く習慣をつけましょう。
本ページはプロモーションを含みます。
参考書籍(PR)
Rustをもっと学びたい方には「実践Rust入門[言語仕様から開発手法まで]」がおすすめです。
PR
コードを書かずに自動化したい方へ
「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。
コメント
コメントを投稿