Erlang Language
Datei I / O
Suche…
Lesen aus einer Datei
Nehmen wir an, Sie haben eine Datei lyrics.txt , die folgende Daten enthält:
summer has come and passed
the innocent can never last
wake me up when september ends
Lesen Sie die gesamte Datei gleichzeitig
Mit file:read_file(File)
können Sie die gesamte Datei lesen. Es ist eine atomare Operation:
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">>}
Lesen Sie jeweils eine Zeile
io:get_line
liest den Text bis zum Zeilenvorschub oder zum Dateiende.
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
Lesen Sie mit dem Direktzugriff
file:pread(IoDevice, Start, Len)
liest von Start
so viel wie Len
von 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"}
In eine Datei schreiben
Schreiben Sie jeweils eine Zeile
Öffnen Sie eine Datei mit dem write
und verwenden Sie 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>
Das Ergebnis ist eine Datei namens fruit_count.txt mit folgendem Inhalt:
Mango 5
Olive 12
Watermelon 3
Wenn Sie eine Datei im Schreibmodus öffnen, wird sie erstellt, sofern sie nicht bereits im Dateisystem vorhanden ist.
Beachten Sie auch, dass bei Verwendung der Option write
mit file:open/2
die Datei abgeschnitten wird (auch wenn Sie nichts hineinschreiben). Um dies zu verhindern, öffnen Sie die Datei im Modus [read,write]
oder [append]
.
Schreiben Sie die gesamte Datei auf einmal
file:write_file(Filename, IO)
ist die einfachste Funktion zum gleichzeitigen Schreiben einer Datei. Wenn die Datei bereits vorhanden ist, wird sie überschrieben, andernfalls wird sie erstellt.
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>
Schreibe mit wahlfreiem Zugriff
Für das Schreiben mit wahlfreiem Zugriff wird file:pwrite(IoDevice, Location, Bytes)
verwendet. Wenn Sie einen String in der Datei ersetzen möchten, ist diese Methode hilfreich.
Angenommen, Sie möchten "Olive 12" in "Apple 15" in der oben erstellten Datei ändern.
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>