Elixir语言中 File
相关用法介绍如下。
该模块包含操作文件的函数。
其中一些函数是低级的,允许用户与文件或 IO 设备进行交互,例如
、 open/2
等。该模块还提供了更高级别的函数,这些函数可以处理文件名,并且它们的命名基于 Unix 变体。例如,可以通过 copy/3
复制文件并通过 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 File.cp_r用法及代码示例
- Elixir File.rm用法及代码示例
- Elixir File.rmdir用法及代码示例
- Elixir File.exists?用法及代码示例
- Elixir File.touch!用法及代码示例
- Elixir File.stream!用法及代码示例
- Elixir File.rename用法及代码示例
- Elixir File.open用法及代码示例
- Elixir File.rm_rf用法及代码示例
- Elixir File.regular?用法及代码示例
- Elixir File.touch用法及代码示例
- Elixir File.dir?用法及代码示例
- 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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。