Elixir語言中 File.open 相關用法介紹如下。
用法一
open(path, modes_or_function \\ [])
@spec open(Path.t(), [mode() | :ram]) :: {:ok, io_device()} | {:error, posix()}
@spec open(Path.t(), (io_device() -> res)) :: {:ok, res} | {:error, posix()}
when res: var
打開給定的 path 。
為了寫入和讀取文件,必須使用  模塊中的函數。默認情況下,文件以IO :binary 模式打開,這需要函數  和IO.binread/2   與文件交互。開發人員可以在打開文件時將 IO.binwrite/2 :utf8 作為選項傳遞,然後   中的所有其他函數都可用,因為它們直接處理 Unicode 數據。IO 
modes_or_function 可以是模式列表或函數。如果它是一個列表,則它被認為是一個模式列表(如下所述)。如果是函數,則相當於調用 open(path, [], modes_or_function) 。有關此函數的更多信息,請參閱  的文檔。open/3 
允許的模式:
- 
:binary- 以二進製模式打開文件,禁用對 Unicode 序列的特殊處理(默認模式)。 - 
:read- 必須存在的文件已打開以供讀取。 - 
:write- 打開文件進行寫入。如果它不存在,則創建它。如果文件確實存在,並且如果寫入未與讀取結合,則文件將被截斷。
 - 
:append- 將打開文件進行寫入,如果文件不存在則創建。對使用 append 打開的文件的每個寫入操作都將在文件末尾進行。 - 
:exclusive- 文件在打開寫入時,如果不存在則創建。如果文件存在,open 將返回{:error, :eexist}。 - 
:charlist- 當給出這個術語時,對文件的讀取操作將返回字符列表而不是二進製文件。 - 
:compressed- 可以讀取或寫入 gzip 壓縮文件。壓縮選項必須與讀或寫結合,但不能同時結合。請注意,使用
獲得的文件大小很可能與可以從壓縮文件中讀取的字節數不匹配。stat/1 - 
:utf8- 此選項表示數據實際存儲在磁盤文件中的方式,並使文件執行字符與 UTF-8 之間的自動轉換。如果數據以無法轉換為 UTF-8 的格式發送到文件,或者如果數據被函數讀取,該函數以無法處理數據字符範圍的格式返回數據,則會發生錯誤並且文件將被關閉。
 - 
:delayed_write,:raw,:ram,:read_ahead,:sync,{:encoding, ...},{:read_ahead, pos_integer},{:delayed_write, non_neg_integer, non_neg_integer}- 有關這些選項的更多信息,請參閱。:file.open/2 
該函數返回:
- 
{:ok, io_device}- 文件已以請求的模式打開。io_device實際上是處理文件的進程的 PID。此進程監視最初打開文件的進程(所有者進程)。如果所有者進程終止,則文件將關閉並且進程本身也會終止。如果io_device鏈接到的任何進程終止,則文件將被關閉並且進程本身將被終止。從此調用返回的io_device可用作模塊函數的參數。IO - 
{:error, reason}- 無法打開文件。 
例子
{:ok, file} = File.open("foo.tar.gz", [:read, :compressed])
IO.read(file, :line)
File.close(file)
用法二
open(path, modes, function)
@spec open(Path.t(), [mode() | :ram], (io_device() -> res)) ::
  {:ok, res} | {:error, posix()}
when res: var
類似於 ,但需要一個函數作為其最後一個參數。open/2 
打開文件,將其作為參數提供給函數,並在函數返回後自動關閉,無論執行函數時是否出現錯誤。
如果成功則返回{:ok, function_result},否則返回{:error, reason}。
此函數期望文件成功關閉,除非給出:delayed_write 選項,否則通常是這種情況。因此,我們不建議將:delayed_write 傳遞給此函數。
例子
File.open("file.txt", [:read, :write], fn file ->
  IO.read(file, :line)
end)
有關可用的 modes 列表,請參閱  。open/2 
相關用法
- Elixir File.cp_r用法及代碼示例
 - Elixir File.rm用法及代碼示例
 - Elixir File.rmdir用法及代碼示例
 - Elixir File.exists?用法及代碼示例
 - Elixir File.touch!用法及代碼示例
 - Elixir File.stream!用法及代碼示例
 - Elixir File.rename用法及代碼示例
 - Elixir File.rm_rf用法及代碼示例
 - Elixir File.regular?用法及代碼示例
 - Elixir File.touch用法及代碼示例
 - Elixir File.dir?用法及代碼示例
 - Elixir File用法及代碼示例
 - Elixir Float.to_charlist用法及代碼示例
 - Elixir Float.ratio用法及代碼示例
 - Elixir Float.to_string用法及代碼示例
 - Elixir Function.identity用法及代碼示例
 - Elixir Float.ceil用法及代碼示例
 - Elixir Float.pow用法及代碼示例
 - Elixir Function用法及代碼示例
 - Elixir Function.info用法及代碼示例
 - Elixir Function.capture用法及代碼示例
 - Elixir Float.round用法及代碼示例
 - Elixir Float.floor用法及代碼示例
 - Elixir Float.parse用法及代碼示例
 - Elixir StringIO.flush用法及代碼示例
 
注:本文由純淨天空篩選整理自elixir-lang.org大神的英文原創作品 File.open(path, modes_or_function \\ [])。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
