#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専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。

コメント

このブログの人気の投稿

#25 Rustで学ぶAI API(ChatGPT等)の呼び出し方の基本

#8 C++で学ぶ文字列操作の基本

#16 TypeScriptで学ぶ辞書型(マップ)の基本