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