Erlang Language
Archivo I / O
Buscar..
Leyendo de un archivo
Supongamos que tiene un archivo lyrics.txt que contiene los siguientes datos:
summer has come and passed
the innocent can never last
wake me up when september ends
Lee el archivo completo a la vez
Al usar file:read_file(File)
, puedes leer el archivo completo. Es una operación atómica:
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">>}
Lee una línea a la vez
io:get_line
lee el texto hasta la nueva línea o el final del archivo.
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
Leer con el acceso aleatorio
file:pread(IoDevice, Start, Len)
lee desde Start
tanto como Len
desde 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"}
Escribiendo en un archivo
Escribe una línea a la vez
Abra un archivo con el modo de write
y use 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>
El resultado será un archivo llamado fruit_count.txt con el siguiente contenido:
Mango 5
Olive 12
Watermelon 3
Tenga en cuenta que abrir un archivo en modo de escritura lo creará, si aún no existe en el sistema de archivos.
Tenga en cuenta también que el uso de la opción de write
con file:open/2
truncará el archivo (incluso si no escribe nada en él). Para evitar esto, abra el archivo en modo [read,write]
o [append]
.
Escribe todo el archivo a la vez
file:write_file(Filename, IO)
es la función más simple para escribir un archivo a la vez. Si el archivo ya existe, se sobrescribirá, de lo contrario se creará.
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>
Escribir con acceso aleatorio
Para escritura de acceso aleatorio, se file:pwrite(IoDevice, Location, Bytes)
. Si desea reemplazar alguna cadena en el archivo, este método es útil.
Supongamos que desea cambiar "Olive 12" a "Apple 15" en el archivo creado anteriormente.
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>