Elixir 在保证关闭的情况下,将数据以文本格式流式传输到文件的长生不老药习惯用法是什么?

Elixir 在保证关闭的情况下,将数据以文本格式流式传输到文件的长生不老药习惯用法是什么?,elixir,Elixir,我已经编写了一些代码来生成值流,我想将它们发送到一个文本文件进行分析。我知道如何使用 { f, :ok } = File.open( 'foobar', [ :write, :utf8 ] ) 但我找不到将流发送到此文件的方法,即使我确信这一定很琐碎 由于这可能是相当大的数据量,我希望避免使用中间数据结构,并坚持使用流式方法。如果可能的话,我还希望有一些方法来保证文件将被关闭,即使在出现错误的情况下。流是使用file.stream创建的。您不需要显式关闭流,因为每次您//将数据流式传输到

我已经编写了一些代码来生成值流,我想将它们发送到一个文本文件进行分析。我知道如何使用

   { f, :ok } = File.open( 'foobar', [ :write, :utf8 ] )
但我找不到将流发送到此文件的方法,即使我确信这一定很琐碎


由于这可能是相当大的数据量,我希望避免使用中间数据结构,并坚持使用流式方法。如果可能的话,我还希望有一些方法来保证文件将被关闭,即使在出现错误的情况下。

流是使用
file.stream创建的。您不需要显式关闭流,因为每次您//将数据流式传输到流中时,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"

按照您的建议,我现在正在执行我的_stream_func()|>stream.take(5)|>stream.into(File.stream!(“a.txt”,[:write,:utf8])。不幸的是,我没有得到任何新的值之间的线。我怎样才能添加这些?@Andy你的意思是:
[“foo”,“bar”,“baz”]|>Stream.flat|map(fn a->[a,“\n”]end)|>Enum.into(File.Stream!(“a.txt”)