Dateien in Rust lesen

RustRustBeginner
Jetzt üben

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

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab wird die open-Funktion als Möglichkeit eingeführt, um eine Datei im schreibgeschützten Modus zu öffnen, indem ein Pfad zur gewünschten Datei angegeben wird. Die Funktion gibt ein File-Objekt zurück, das den Dateidescriptor besitzt und sich um das Schließen der Datei kümmert, wenn sie nicht mehr benötigt wird.

Um die open-Funktion zu verwenden, muss man die erforderlichen Module wie std::fs::File, std::io::prelude::* und std::path::Path importieren. Die File::open-Methode wird dann mit dem Pfad als Argument aufgerufen. Wenn die Datei erfolgreich geöffnet wird, gibt die Funktion ein Result<File, io::Error>-Objekt zurück, andernfalls bricht sie mit einer Fehlermeldung ab.

Sobald die Datei geöffnet ist, können ihre Inhalte mit der read_to_string-Methode gelesen werden. Diese Methode liest die Inhalte der Datei in einen String und gibt ein Result<usize, io::Error> zurück. Wenn der Lesevorgang erfolgreich ist, enthält der String die Dateiinhalte. Andernfalls bricht er mit einer Fehlermeldung ab.

Im bereitgestellten Beispiel werden die Inhalte der hello.txt-Datei gelesen und auf der Konsole ausgegeben. Das drop-Trait wird verwendet, um sicherzustellen, dass die Datei geschlossen wird, wenn das file-Objekt außer Gültigkeitsbereich gelangt.

Hinweis: Wenn das Lab keinen Dateinamen angibt, können Sie einen beliebigen Dateinamen verwenden. Beispielsweise können Sie main.rs verwenden, es mit rustc main.rs &&./main kompilieren und ausführen.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/BasicConceptsGroup(["Basic Concepts"]) rust(("Rust")) -.-> rust/DataTypesGroup(["Data Types"]) rust(("Rust")) -.-> rust/MemorySafetyandManagementGroup(["Memory Safety and Management"]) rust(("Rust")) -.-> rust/ErrorHandlingandDebuggingGroup(["Error Handling and Debugging"]) rust(("Rust")) -.-> rust/AdvancedTopicsGroup(["Advanced Topics"]) rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust(("Rust")) -.-> rust/DataStructuresandEnumsGroup(["Data Structures and Enums"]) 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{{"Dateien in Rust lesen"}} rust/mutable_variables -.-> lab-99270{{"Dateien in Rust lesen"}} rust/string_type -.-> lab-99270{{"Dateien in Rust lesen"}} rust/function_syntax -.-> lab-99270{{"Dateien in Rust lesen"}} rust/expressions_statements -.-> lab-99270{{"Dateien in Rust lesen"}} rust/lifetime_specifiers -.-> lab-99270{{"Dateien in Rust lesen"}} rust/method_syntax -.-> lab-99270{{"Dateien in Rust lesen"}} rust/panic_usage -.-> lab-99270{{"Dateien in Rust lesen"}} rust/operator_overloading -.-> lab-99270{{"Dateien in Rust lesen"}} end

open

Die open-Funktion kann verwendet werden, um eine Datei im schreibgeschützten Modus zu öffnen.

Ein File besitzt eine Ressource, den Dateidescriptor, und kümmert sich um das Schließen der Datei, wenn es droped wird.

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

fn main() {
    // Erzeuge einen Pfad zur gewünschten Datei
    let path = Path::new("hello.txt");
    let display = path.display();

    // Öffne den Pfad im schreibgeschützten Modus, gibt `io::Result<File>` zurück
    let mut file = match File::open(&path) {
        Err(why) => panic!("konnte {} nicht öffnen: {}", display, why),
        Ok(file) => file,
    };

    // Lies den Dateiinhalt in einen String, gibt `io::Result<usize>` zurück
    let mut s = String::new();
    match file.read_to_string(&mut s) {
        Err(why) => panic!("konnte {} nicht lesen: {}", display, why),
        Ok(_) => print!("{} enthält:\n{}", display, s),
    }

    // `file` verlässt den Gültigkeitsbereich, und die Datei "hello.txt" wird geschlossen
}

Hier ist die erwartete erfolgreiche Ausgabe:

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

(Es wird empfohlen, das vorherige Beispiel unter verschiedenen Fehlbedingungen zu testen: hello.txt existiert nicht oder hello.txt ist nicht lesbar usw.)

Zusammenfassung

Herzlichen Glückwunsch! Sie haben das Lab "Open" abgeschlossen. Sie können in LabEx weitere Labs absolvieren, um Ihre Fähigkeiten zu verbessern.