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

How to read a portion of a file in Elixir (or Erlang)?

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

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

您可以使用 :file.position/2 and :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 个字节。

如果你阅读 documentation. For example 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.

这将是 Hynek 共享的转录到 Elixir 的代码。我只 post 它作为答案,因为它的评论有点长。

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 和其他核心提交者是我 运行 在多年的软件开发过程中接触过的最友好的人。