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 \\ [])。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。