寫入檔案
一次寫一行
使用 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>