如何在Elixir(或Erlang)中读取文件的一部分?

时间:2016-05-09 17:09:03

标签: file erlang elixir partial

我们如何只读取文件的选定部分?

像这样:Read(file, start, length)

3 个答案:

答案 0 :(得分:10)

您可以使用:file.position/2:file.read/2

使用:

$ seq 10 > 10.txt

和代码:

{:ok, file} = :file.open("10.txt", [:read, :binary])
:file.position(file, 5)
IO.inspect :file.read(file, 10)

输出结果为:

{:ok, "\n4\n5\n6\n7\n8"}

从第6个字节开始是10个字节。

答案 1 :(得分:4)

如果你阅读documentation,那将会很方便。例如file:pread/2,3

read(File, Start, Length) ->
    {ok, F} = file:open(File, [binary]),
    try file:pread(F, [{Start, Length}]) of
        {ok, [Data]} -> Data
    after file:close(F)
    end.

答案 2 :(得分:3)

这将是Hynek共享转录给Elixir的代码。我只是将其作为答案发布,因为发表评论的时间有点长。

def read(file, start, length) do
  {ok, f} = :file.open(file, [:binary])
  {ok, data} = :file.pread(f, start, length)
  :file.close(f)
  data
end

是的,授予它在Elixir文件模块中有这个很好。如果你真的想要它@CharlesO,你为什么不继续创建拉取请求? Jose和其他核心提交者是我在多年和多年软件开发中遇到过的最友好的人。