写入文件

一次写一行

使用 write 模式打开文件并使用 io:format/2

1> {ok, S} = file:open("fruit_count.txt", [write]).
{ok,<0.57.0>}
2> io:format(S, "~s~n", ["Mango 5"]).
ok
3> io:format(S, "~s~n", ["Olive 12"]).
ok
4> io:format(S, "~s~n", ["Watermelon 3"]).
ok
5>

结果将是一个名为 fruit_count.txt 的文件,其中包含以下内容:

Mango 5
Olive 12
Watermelon 3

请注意,如果文件系统中尚未存在,则以写入模式打开文件将创建该文件。

另请注意,将 write 选项与 file:open/2 一起使用会截断文件(即使你没有在其中写入任何内容)。要防止这种情况,请在 [read,write][append] 模式下打开文件。

一次写入整个文件

file:write_file(Filename, IO) 是一次写入文件最简单的功能。如果文件已经存在,它将被覆盖,否则将被创建。

1> file:write_file("fruit_count.txt", ["Mango 5\nOlive 12\nWatermelon 3\n"
]).
ok
2> file:read_file("fruit_count.txt").
{ok,<<"Mango 5\nOlive 12\nWatermelon 3\n">>}
3>

随机访问写入

对于随机访问写入,使用 file:pwrite(IoDevice, Location, Bytes)。如果要替换文件中的某些字符串,则此方法很有用。

假设你要在上面创建的文件中将 Olive 12 更改为 Apple 15

1> {ok, S} = file:open("fruit_count.txt", [read, write]).
{ok,{file_descriptor,prim_file,{#Port<0.412>,676}}}
2> file:pwrite(S, 8, ["Apple 15\n"]).
ok
3> file:read_file("fruit_count.txt").
{ok,<<"Mango 5\nApple 15\nWatermelon 3">>}
4> file:close(S).
ok
5>