我编写了一些代码来生成值流,我想将这些代码发送到文本文件进行分析。我知道如何使用
打开文件 { f, :ok } = File.open( 'foobar', [ :write, :utf8 ] )
但我找不到将流发送到此文件的方法,即使我确定这必须是微不足道的。
由于这可能是相当大量的数据,我想避免使用中间数据结构并坚持使用流式方法。如果可能的话,我也想保证文件将被关闭,即使出现错误也是如此。
答案 0 :(得分:3)
使用File.stream!
创建流。您不需要明确关闭流,因为每次start / stop / halt将数据流入其中时,Elixir会自动打开和关闭其文件。
请注意,每次开始播放时都会自动打开该文件。
您可以使用Enum.into
(或Stream.into
)将可枚举或流写入File.stream!
返回的文件流,而不将可枚举/流的值存储在内存中:
iex(1)> ["foo", "bar"] |> Enum.into(File.stream!("a.txt"))
%File.Stream{line_or_bytes: :line, modes: [:raw, :read_ahead, :binary],
path: "a.txt", raw: true}
iex(2)> File.read!("a.txt")
"foobar"