Szukaj…


Odczytywanie z pliku

Załóżmy, że masz plik lyrics.txt, który zawiera następujące dane:

summer has come and passed
the innocent can never last
wake me up when september ends

Przeczytaj cały plik na raz

Korzystając z file:read_file(File) , możesz odczytać cały plik. To operacja atomowa:

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">>}

Czytaj jedną linię na raz

io:get_line czyta tekst do nowej linii lub końca pliku.

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

Czytaj z losowym dostępem

file:pread(IoDevice, Start, Len) czyta z Start tyle samo, co Len z 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"}       

Zapis do pliku

Napisz jedną linię na raz

Otwórz plik w trybie write i użyj 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>

Rezultatem będzie plik o nazwie fruit_count.txt o następującej zawartości:

Mango 5
Olive 12
Watermelon 3

Zauważ, że otwarcie pliku w trybie zapisu spowoduje utworzenie go, jeśli jeszcze nie istnieje w systemie plików.

Zauważ też, że użycie opcji write z file:open/2 spowoduje obcięcie pliku (nawet jeśli nic w nim nie zapisujesz). Aby temu zapobiec, otwórz plik w trybie [read,write] lub [append] .

Napisz cały plik na raz

file:write_file(Filename, IO) to najprostsza funkcja do zapisu pliku na raz. Jeśli plik już istnieje, zostanie zastąpiony, w przeciwnym razie zostanie utworzony.

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>

Pisz z losowym dostępem

Do zapisu o swobodnym dostępie stosuje się file:pwrite(IoDevice, Location, Bytes) . Jeśli chcesz zamienić ciąg znaków w pliku, ta metoda jest przydatna.

Załóżmy, że chcesz zmienić „Olive 12” na „Apple 15” w utworzonym pliku.

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>


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow