Elixir - 檔案 I/O



檔案 I/O 是任何程式語言不可或缺的一部分,因為它允許語言與檔案系統上的檔案互動。在本章中,我們將討論兩個模組 - Path 和 File。

Path 模組

path 模組是一個非常小的模組,可以被認為是檔案系統操作的輔助模組。File 模組中的大多數函式都期望路徑作為引數。最常見的是,這些路徑將是常規二進位制檔案。Path 模組提供了處理此類路徑的功能。建議使用 Path 模組中的函式,而不是僅僅操作二進位制檔案,因為 Path 模組透明地處理不同的作業系統。需要注意的是,Elixir 在執行檔案操作時會自動將斜槓 (/) 轉換為反斜槓 (\)(在 Windows 上)。

讓我們考慮以下示例來進一步瞭解 Path 模組:

IO.puts(Path.join("foo", "bar"))

當執行以上程式時,它會產生以下結果:

foo/bar

path 模組提供了許多方法。您可以檢視不同的方法 此處。如果您正在執行許多檔案操作,則經常使用這些方法。

File 模組

file 模組包含允許我們將檔案開啟為 IO 裝置的函式。預設情況下,檔案以二進位制模式開啟,這要求開發人員使用 IO 模組中的特定 IO.binreadIO.binwrite 函式。讓我們建立一個名為 newfile 的檔案並向其中寫入一些資料。

{:ok, file} = File.read("newfile", [:write]) 
# Pattern matching to store returned stream
IO.binwrite(file, "This will be written to the file")

如果您去開啟我們剛剛寫入的檔案,內容將以以下方式顯示:

This will be written to the file 

現在讓我們瞭解如何使用 file 模組。

開啟檔案

要開啟檔案,我們可以使用以下 2 個函式中的任何一個:

{:ok, file} = File.open("newfile")
file = File.open!("newfile")

現在讓我們瞭解 File.open 函式和 File.open!() 函式之間的區別。

  • File.open 函式始終返回一個元組。如果檔案成功開啟,它會將元組中的第一個值返回為 :ok,第二個值是 io_device 型別的字面量。如果發生錯誤,它將返回一個元組,第一個值為 :error,第二個值為原因。

  • 另一方面,File.open!() 函式如果檔案成功開啟則會返回一個 io_device,否則會引發錯誤。注意:這是我們將要討論的所有 file 模組函式中遵循的模式。

我們還可以指定要以何種模式開啟此檔案。要以只讀模式和 utf-8 編碼模式開啟檔案,我們使用以下程式碼:

file = File.open!("newfile", [:read, :utf8])

寫入檔案

我們有兩種方法可以寫入檔案。讓我們看看第一個使用 File 模組中的 write 函式。

File.write("newfile", "Hello")

但是,如果您對同一個檔案進行多次寫入,則不應使用此方法。每次呼叫此函式時,都會開啟一個檔案描述符並生成一個新程序來寫入檔案。如果您在迴圈中進行多次寫入,請透過 File.open 開啟檔案,並使用 IO 模組中的方法寫入檔案。讓我們考慮一個示例來理解相同的內容:

#Open the file in read, write and utf8 modes. 
file = File.open!("newfile_2", [:read, :utf8, :write])

#Write to this "io_device" using standard IO functions
IO.puts(file, "Random text")

您可以使用其他 IO 模組方法(如 IO.writeIO.binwrite)寫入以 io_device 開啟的檔案。

從檔案讀取

我們有兩種方法可以從檔案讀取。讓我們看看第一個使用 File 模組中的 read 函式。

IO.puts(File.read("newfile"))

執行此程式碼時,您應該獲得一個元組,其第一個元素為 :ok,第二個元素為 newfile 的內容。

我們還可以使用 File.read! 函式來獲取返回給我們的檔案內容。

關閉開啟的檔案

每當您使用 File.open 函式開啟檔案後,在完成使用後,都應使用 File.close 函式關閉它:

File.close(file)
廣告