> Erlang中文手册 > pwrite/3 在文件的一个指定位置写入数据

file:pwrite/3

在文件的一个指定位置写入数据

用法:

pwrite(IoDevice, LocBytes) -> ok | {error, {N, Reason}}

该方法会在一个操作里执行 file:position/2 和 file:write/2 这两个方法,这比每一次调用更有效率。如果 IoDevice 以 raw 的模式打开,那么会有一些限制出现:参数 Location 只允许是一个整数;在操作执行完后文件的当前位置是被设置为 undefined。

当定位在一个不是 latin1 字符而是其他编码的文件,必须谨慎设置一个正确字符边界的位置,详情看 file:position/2。

下面是在文件位置处的第 N 个数据长度(N * Size)写入数据,如果原先已有旧的数据则会被覆盖。

File = "./file_write.txt",
{ok, IoDevice} = file:open(File, [write, raw, binary]),
Bin = >,
Size = size(Bin),
lists:foreach(
    fun(N) -> file:pwrite(IoDevice, N * Size, Bin) end,
    lists:seq(0, 50)
),
file:close(IoDevice).