當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Elixir File用法及代碼示例


Elixir語言中 File 相關用法介紹如下。

該模塊包含操作文件的函數。

其中一些函數是低級的,允許用戶與文件或 IO 設備進行交互,例如 open/2 copy/3 等。該模塊還提供了更高級別的函數,這些函數可以處理文件名,並且它們的命名基於 Unix 變體。例如,可以通過 cp/3 複製文件並通過 rm_rf/1 遞歸刪除文件和目錄。

此模塊中函數的路徑可以是相對於當前工作目錄的路徑(由 File.cwd/0 返回),也可以是絕對路徑。 ~ 等 Shell 約定不會自動擴展。要使用 ~/Downloads 之類的路徑,您可以使用 Path.expand/1 Path.expand/2 將路徑擴展為絕對路徑。

編碼

為了寫入和讀取文件,必須使用 IO 模塊中的函數。默認情況下,文件以二進製模式打開,這需要函數 IO.binread/2 IO.binwrite/2 與文件交互。開發人員可以在打開文件時將:utf8 作為選項傳遞,然後必須使用較慢的 IO.read/2 IO.write/2 函數,因為它們負責進行正確的轉換並提供正確的數據保證。

請注意,在 Elixir 中作為字符列表給出的文件名始終被視為 UTF-8。特別是,我們希望 shell 和操作係統配置為使用 UTF-8 編碼。二進製文件名被視為原始文件名並按原樣傳遞給操作係統。

API

此模塊中的大多數函數在成功的情況下返回:ok{:ok, result},否則返回{:error, reason}。這些函數還有一個以! 結尾的變體,它在成功的情況下返回結果(而不是{:ok, result} 元組),或者在失敗的情況下引發異常。例如:

File.read("hello.txt")
#=> {:ok, "World"}

File.read("invalid.txt")
#=> {:error, :enoent}

File.read!("hello.txt")
#=> "World"

File.read!("invalid.txt")
#=> raises File.Error

一般來說,如果文件不存在,開發人員應該使用前者,以防他們想要做出反應。當開發人員希望他們的軟件在無法讀取文件的情況下失敗(即它實際上是一個例外)時,應該使用後者。

進程和原始文件

每次打開文件時,Elixir 都會生成一個新進程。寫入文件相當於向寫入文件說明符的進程發送消息。

這意味著文件可以在節點之間傳遞,並且消息傳遞保證它們可以寫入網絡中的同一個文件。

但是,您可能並不總是希望為這種抽象付出代價。在這種情況下,可以在:raw 模式下打開文件。選項 :read_ahead:delayed_write 在處理大文件或在緊密循環中處理文件時也很有用。

檢查 :file.open/2 以獲取有關此類選項和其他性能注意事項的更多信息。

相關用法


注:本文由純淨天空篩選整理自elixir-lang.org大神的英文原創作品 File。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。