当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Elixir File用法及代码示例


Elixir语言中 File 相关用法介绍如下。

该模块包含操作文件的函数。

其中一些函数是低级的,允许用户与文件或 IO 设备进行交互,例如 open/2 copy/3 等。该模块还提供了更高级别的函数,这些函数可以处理文件名,并且它们的命名基于 Unix 变体。例如,可以通过 cp/3 复制文件并通过 rm_rf/1 递归删除文件和目录。

此模块中函数的路径可以是相对于当前工作目录的路径(由 File.cwd/0 返回),也可以是绝对路径。 ~ 等 Shell 约定不会自动扩展。要使用 ~/Downloads 之类的路径,您可以使用 Path.expand/1 Path.expand/2 将路径扩展为绝对路径。

编码

为了写入和读取文件,必须使用 IO 模块中的函数。默认情况下,文件以二进制模式打开,这需要函数 IO.binread/2 IO.binwrite/2 与文件交互。开发人员可以在打开文件时将:utf8 作为选项传递,然后必须使用较慢的 IO.read/2 IO.write/2 函数,因为它们负责进行正确的转换并提供正确的数据保证。

请注意,在 Elixir 中作为字符列表给出的文件名始终被视为 UTF-8。特别是,我们希望 shell 和操作系统配置为使用 UTF-8 编码。二进制文件名被视为原始文件名并按原样传递给操作系统。

API

此模块中的大多数函数在成功的情况下返回:ok{:ok, result},否则返回{:error, reason}。这些函数还有一个以! 结尾的变体,它在成功的情况下返回结果(而不是{:ok, result} 元组),或者在失败的情况下引发异常。例如:

File.read("hello.txt")
#=> {:ok, "World"}

File.read("invalid.txt")
#=> {:error, :enoent}

File.read!("hello.txt")
#=> "World"

File.read!("invalid.txt")
#=> raises File.Error

一般来说,如果文件不存在,开发人员应该使用前者,以防他们想要做出反应。当开发人员希望他们的软件在无法读取文件的情况下失败(即它实际上是一个例外)时,应该使用后者。

进程和原始文件

每次打开文件时,Elixir 都会生成一个新进程。写入文件相当于向写入文件说明符的进程发送消息。

这意味着文件可以在节点之间传递,并且消息传递保证它们可以写入网络中的同一个文件。

但是,您可能并不总是希望为这种抽象付出代价。在这种情况下,可以在:raw 模式下打开文件。选项 :read_ahead:delayed_write 在处理大文件或在紧密循环中处理文件时也很有用。

检查 :file.open/2 以获取有关此类选项和其他性能注意事项的更多信息。

相关用法


注:本文由纯净天空筛选整理自elixir-lang.org大神的英文原创作品 File。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。