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 \\ [])。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。