Erlang Language
File I / O
Ricerca…
Lettura da un file
Supponiamo che tu abbia un file text.txt che contiene i seguenti dati:
summer has come and passed
the innocent can never last
wake me up when september ends
Leggi l'intero file alla volta
Usando il file:read_file(File)
, puoi leggere l'intero file. È un'operazione atomica:
1> file:read_file("lyrics.txt").
{ok,<<"summer has come and passed\r\nthe innocent can never last\r\nWake me up w
hen september ends\r\n">>}
Leggi una riga alla volta
io:get_line
legge il testo fino alla fine riga o alla fine del file.
1> {ok, S} = file:open("lyrics.txt", read).
{ok,<0.57.0>}
2> io:get_line(S, '').
"summer has come and passed\n"
3> io:get_line(S, '').
"the innocent can never last\n"
4> io:get_line(S, '').
"wake me up when september ends\n"
5> io:get_line(S, '').
eof
6> file:close(S).
ok
Leggi con l'accesso casuale
file:pread(IoDevice, Start, Len)
legge da Start
tanto quanto Len
da IoDevice
.
1> {ok, S} = file:open("lyrics.txt", read).
{ok,<0.57.0>}
2> file:pread(S, 0, 6).
{ok,"summer"}
3> file:pread(S, 7, 3).
{ok,"has"}
Scrivere su un file
Scrivi una riga alla volta
Apri un file con la modalità di write
e usa 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>
Il risultato sarà un file denominato fruit_count.txt con i seguenti contenuti:
Mango 5
Olive 12
Watermelon 3
Si noti che l'apertura di un file in modalità di scrittura verrà creata, se non già esistente nel file system.
Nota anche che usando l'opzione di write
con file:open/2
troncherà il file (anche se non scrivi nulla in esso). Per evitare ciò, aprire il file in modalità [read,write]
o [append]
.
Scrivi l'intero file in una sola volta
file:write_file(Filename, IO)
è la funzione più semplice per scrivere un file in una volta. Se il file esiste già, verrà sovrascritto, altrimenti verrà creato.
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>
Scrivi con accesso casuale
Per la scrittura ad accesso casuale, viene utilizzato il file:pwrite(IoDevice, Location, Bytes)
. Se si desidera sostituire una stringa nel file, questo metodo è utile.
Supponiamo che tu voglia cambiare "Olive 12" in "Apple 15" nel file creato sopra.
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>