寫入檔案

一次寫一行

使用 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>