Rust でのファイル読み取り

RustRustBeginner
今すぐ練習

This tutorial is from open-source community. Access the source code

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、open 関数を紹介します。これは、読み取り専用モードでファイルを開くための方法で、開きたいファイルのパスを指定することで使用できます。この関数は、ファイル記述子を持つ File オブジェクトを返し、必要なくなったときにファイルを閉じる処理を行います。

open 関数を使用するには、std::fs::Filestd::io::prelude::*std::path::Path などの必要なモジュールをインポートする必要があります。その後、File::open メソッドにパスを引数として渡して呼び出します。ファイルが正常に開かれた場合、関数は Result<File, io::Error> オブジェクトを返します。それ以外の場合は、エラーメッセージとともにパニックします。

ファイルが開かれたら、read_to_string メソッドを使用してその内容を読み取ることができます。このメソッドは、ファイルの内容を文字列に読み込み、Result<usize, io::Error> を返します。読み取り操作が成功した場合、文字列にはファイルの内容が含まれます。それ以外の場合は、エラーメッセージとともにパニックします。

提供された例では、hello.txt ファイルの内容を読み取り、コンソールに出力しています。drop トレイトを使用して、file オブジェクトがスコープ外になったときにファイルが閉じることを確認しています。

注: 実験でファイル名が指定されていない場合、好きなファイル名を使用できます。たとえば、main.rs を使用して、rustc main.rs &&./main でコンパイルして実行することができます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/ErrorHandlingandDebuggingGroup(["Error Handling and Debugging"]) rust(("Rust")) -.-> rust/AdvancedTopicsGroup(["Advanced Topics"]) rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust(("Rust")) -.-> rust/MemorySafetyandManagementGroup(["Memory Safety and Management"]) rust(("Rust")) -.-> rust/DataStructuresandEnumsGroup(["Data Structures and Enums"]) rust(("Rust")) -.-> rust/BasicConceptsGroup(["Basic Concepts"]) rust(("Rust")) -.-> rust/DataTypesGroup(["Data Types"]) rust/BasicConceptsGroup -.-> rust/variable_declarations("Variable Declarations") rust/BasicConceptsGroup -.-> rust/mutable_variables("Mutable Variables") rust/DataTypesGroup -.-> rust/string_type("String Type") rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") rust/MemorySafetyandManagementGroup -.-> rust/lifetime_specifiers("Lifetime Specifiers") rust/DataStructuresandEnumsGroup -.-> rust/method_syntax("Method Syntax") rust/ErrorHandlingandDebuggingGroup -.-> rust/panic_usage("panic! Usage") rust/AdvancedTopicsGroup -.-> rust/operator_overloading("Traits for Operator Overloading") subgraph Lab Skills rust/variable_declarations -.-> lab-99270{{"Rust でのファイル読み取り"}} rust/mutable_variables -.-> lab-99270{{"Rust でのファイル読み取り"}} rust/string_type -.-> lab-99270{{"Rust でのファイル読み取り"}} rust/function_syntax -.-> lab-99270{{"Rust でのファイル読み取り"}} rust/expressions_statements -.-> lab-99270{{"Rust でのファイル読み取り"}} rust/lifetime_specifiers -.-> lab-99270{{"Rust でのファイル読み取り"}} rust/method_syntax -.-> lab-99270{{"Rust でのファイル読み取り"}} rust/panic_usage -.-> lab-99270{{"Rust でのファイル読み取り"}} rust/operator_overloading -.-> lab-99270{{"Rust でのファイル読み取り"}} end

open

open 関数を使用すると、読み取り専用モードでファイルを開くことができます。

File は、リソース(ファイル記述子)を所有し、drop されたときにファイルを閉じる処理を行います。

use std::fs::File;
use std::io::prelude::*;
use std::path::Path;

fn main() {
    // 開きたいファイルへのパスを作成する
    let path = Path::new("hello.txt");
    let display = path.display();

    // 読み取り専用モードでパスを開き、`io::Result<File>` を返す
    let mut file = match File::open(&path) {
        Err(why) => panic!("couldn't open {}: {}", display, why),
        Ok(file) => file,
    };

    // ファイルの内容を文字列に読み込み、`io::Result<usize>` を返す
    let mut s = String::new();
    match file.read_to_string(&mut s) {
        Err(why) => panic!("couldn't read {}: {}", display, why),
        Ok(_) => print!("{} contains:\n{}", display, s),
    }

    // `file` がスコープ外になり、"hello.txt" ファイルが閉じられる
}

期待される正常な出力は以下の通りです。

$ echo "Hello World!" > hello.txt
$ rustc open.rs && ./open
hello.txt contains:
Hello World!

(前の例を、異なるエラー条件下でテストすることをお勧めします。たとえば、hello.txt が存在しない場合や、hello.txt が読み取り可能でない場合など)

まとめ

おめでとうございます!あなたは Open 実験を完了しました。あなたの技術を向上させるために、LabExでさらに多くの実験を行って練習してください。