Linux中國

如何在 Rust 中讀取和寫入文件

知道如何讀寫文件對各種用途都很有用。在 Rust 中,這項任務是通過標準庫中的文件系統模塊(std::fs)完成的。在這篇文章中,我將向你介紹如何使用這個模塊。

為了演示這項任務,我準備了一些示例代碼,也可以在 GitHub 上找到。

準備工作

在使用 Rust 時,失敗的函數會返回 Result 類型。尤其是文件系統模塊會返回專門的類型 std::io::Result<T, Error>。有了這些知識,你可以從 main() 函數中返回相同的類型:

fn  main() ->  std::io::Result<()> {
/* ...code comes here... */

Rust 文件寫入

在 Rust 中執行文件的 I/O 操作是相對容易的。寫入文件可以簡化為一行:

use  std::fs;
fs::write("favorite_websites.txt", b"opensource.com")?;
Ok(())

使用錯誤傳播操作符 (?),錯誤信息被傳遞到調用函數中,隨後可以處理錯誤。由於 main() 是調用棧中唯一的其他函數,如果寫操作失敗,錯誤信息將被傳遞到控制台輸出。

fs::write 函數的語法是非常先進的。第一個參數是文件路徑,它必須是 std::path::Path 類型。第二個參數是內容,它實際上是一個位元組切片([u8])。Rust 將傳遞的參數轉換為正確的類型。幸運的是,這些類型基本上是下面的例子中所處理的唯一類型。

使用文件描述符類型 std::fs::File 可以實現對寫操作更簡潔的訪問:

let mut file = fs::File::create("favorite_websites.txt")?;
file.write_all(b"opensource.comn")?;
Ok(())

由於文件類型實現了 Write 特性,所以可以使用相關的方法來寫入文件。然而,create 方法可以覆蓋一個已經存在的文件。

為了獲得對文件描述符的更多控制,必須使用 std::fs::OpenOptions 類型。這提供了類似於其他語言中的打開模式:

let mut file = fs::OpenOptions::new()
                            .append(true)
                            .open("favorite_websites.txt")?;

file.write_all(b"sourceforge.netn")?;

Rust 文件讀取

適用於寫的東西也適用於讀。讀取也可以通過簡單的一行代碼來完成:

let websites = fs::read_to_string("favorite_websites.txt")?;

以上一行讀取文件的內容並返回一個字元串。除了讀取字元串,還有 std::fs::read 函數,如果文件包含二進位數據,該函數會將數據讀成一個位元組向量。

下一個例子顯示了如何將文件的內容讀入內存,隨後逐行列印到控制台:

let file = fs::File::open("favorite_websites.txt")?;
let lines = io::BufReader::new(file).lines();

for line in lines {
    if let Ok(_line) = line {
        println!(">>> {}", _line);
    }
}

總結

如果你已經熟悉了其他編程語言,你可能已經注意到沒有 close- 函數(或類似的)來釋放文件句柄。在 Rust 中,當相關變數超出作用域,文件句柄就會被釋放。為了定義關閉行為,可以在文件表示的周圍應用作用域 ({ })。我建議你熟悉 ReadWrite 特性,因為你可以在許多其他類型中找到這個特性的實現。

via: https://opensource.com/article/23/1/read-write-files-rust

作者:Stephan Avenwedde 選題:lkxed 譯者:geekpi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國