如何在 Rust 中讀取和寫入文件
知道如何讀寫文件對(duì)各種用途都很有用。在 Rust 中,這項(xiàng)任務(wù)是通過標(biāo)準(zhǔn)庫中的文件系統(tǒng)模塊(??std::fs??)完成的。在這篇文章中,我將向你介紹如何使用這個(gè)模塊。
為了演示這項(xiàng)任務(wù),我準(zhǔn)備了一些示例代碼,也可以在 ??GitHub?? 上找到。
準(zhǔn)備工作
在使用 Rust 時(shí),失敗的函數(shù)會(huì)返回 ??Result?? 類型。尤其是文件系統(tǒng)模塊會(huì)返回專門的類型 ??std::io::Result<T, Error>??。有了這些知識(shí),你可以從 ??main()?
? 函數(shù)中返回相同的類型:
Rust 文件寫入
在 Rust 中執(zhí)行文件的 I/O 操作是相對(duì)容易的。寫入文件可以簡化為一行:
使用錯(cuò)誤傳播操作符 ??(?)?
?,錯(cuò)誤信息被傳遞到調(diào)用函數(shù)中,隨后可以處理錯(cuò)誤。由于 ??main()?
? 是調(diào)用棧中唯一的其他函數(shù),如果寫操作失敗,錯(cuò)誤信息將被傳遞到控制臺(tái)輸出。
??fs::write?? 函數(shù)的語法是非常先進(jìn)的。第一個(gè)參數(shù)是文件路徑,它必須是 ??std::path::Path?? 類型。第二個(gè)參數(shù)是內(nèi)容,它實(shí)際上是一個(gè)字節(jié)切片(??[u8]?
?)。Rust 將傳遞的參數(shù)轉(zhuǎn)換為正確的類型。幸運(yùn)的是,這些類型基本上是下面的例子中所處理的唯一類型。
使用文件描述符類型 ??std::fs::File?? 可以實(shí)現(xiàn)對(duì)寫操作更簡潔的訪問:
由于文件類型實(shí)現(xiàn)了 ??Write?? 特性,所以可以使用相關(guān)的方法來寫入文件。然而,??create?
? 方法可以覆蓋一個(gè)已經(jīng)存在的文件。
為了獲得對(duì)文件描述符的更多控制,必須使用 ??std::fs::OpenOptions?? 類型。這提供了類似于其他語言中的打開模式:
Rust 文件讀取
適用于寫的東西也適用于讀。讀取也可以通過簡單的一行代碼來完成:
以上一行讀取文件的內(nèi)容并返回一個(gè)字符串。除了讀取字符串,還有 ??std::fs::read?? 函數(shù),如果文件包含二進(jìn)制數(shù)據(jù),該函數(shù)會(huì)將數(shù)據(jù)讀成一個(gè)字節(jié)向量。
下一個(gè)例子顯示了如何將文件的內(nèi)容讀入內(nèi)存,隨后逐行打印到控制臺(tái):
總結(jié)
如果你已經(jīng)熟悉了其他編程語言,你可能已經(jīng)注意到?jīng)]有 ??close-?
? 函數(shù)(或類似的)來釋放文件句柄。在 Rust 中,當(dāng)相關(guān)變量超出作用域,文件句柄就會(huì)被釋放。為了定義關(guān)閉行為,可以在文件表示的周圍應(yīng)用作用域 ??({ })?
?。我建議你熟悉 ??Read?? 和 ??Write?? 特性,因?yàn)槟憧梢栽谠S多其他類型中找到這個(gè)特性的實(shí)現(xiàn)。