写入文件
一次写一行
使用 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>