库的组织结构。
Erlang把操纵文件的函数编排在4个不同的模块中:
1,file模块。这个模块包含了用于文件打开、关闭、读取、写入和目录列表等功能的函数。表13-1对file模块中最常用的函数做了一个简要的汇总。至于完整的细节信息,还请参阅file模块的用户手册。
2,filename模块。这个模块以平台独立的方式提供了一套操纵文件名的函数。因此你可以在不同的操作系统上执行相同的操作,而无须修改代码。
3,filelib模块。这个模块是file模块的扩展。它提供了一套辅助函数用于生成文件列表、检验文件类型等操作。其中的大多数代码都是基于file模块的函数来编写的。
4,io模块。这个模块提供了一系列对已打开的文件进行操作的函数。这个模块中的函数可以用于文件中数据的解析以及向文件写入格式化的数据。
读取文件的不同方法。
datal.dat文件
{person,"joe","armstrong",
[{occupation,programmer},{favoriteLanguage,erlang}]}.
{cat,{name,"zorro"},
{owner,"joe"}}.
change_group() %%修改一个文件的群组
change_owner() %%修改个文件的所有者
change_time() %%修改一个文件的最近访问或者最近更新时间
close() %%关闭一个文件
consult() %%从一个文件中读取Erlang项
copy() %%复制文件内容
dell_dir() %%删除一个目录
delete() %%删除一个文件
eval() %%在文件中对一个Erlang表达式求值
format_error() %%返回一个错误原因的描述字符串
get_cwd() %%得到当前工作目录
list_dir() %%获取一个目录中文件列表
make_dir() %%创建一个目录
make_link() %%为一个文件创建一个硬链接(hardlink)
make_symlink() %%为一个文件或者目录创建符号链接(symbolic link)
open() %%打开一个文件
position() %%设置一个文件的访问位置
pread() %%在一个特定的文件访问位置上读取文件
pwrite() %%在一个特定的文件访问位置上写入文件
read() %%从文件中读取内容
read_file() %%读取整个文件
read_file_info()%%获得一个文件的信息
read_link() %%查看一个文件的链接指向
read_link_info()%%获得一个文件或者链接的信息
rename() %%重命名一个文件
script() %%对一个文件中的Erlang表达式求值并返回结果
set_cwd() %%设定当前的工作目录
sync() %%把一个文件的内存状态同步到该文件的物理存储上
truncate() %%截断一个文件
write() %%向一个文件写入数据
write_file() %%写入整个文件
writefile_info()%%修改一个文件的信息
datal.dat文件包含了一些Erlang的数据项,我们可以像下面的程序一样,通过调用file:consult来读取这个文件中的所有数据:
1>file:consult("datal.dat").
{ok,[{person, "joe",
"armstrong",
[{occupation, programmer} ,{favoriteLanguage,erlang}]},
{cat , {name , "zorro"} , {owner, "joe"}}]}
从文件的数据项中一次读取一项,先要使用file:open打开文件,然后使用io:read函数读取独立的数据项直到读到文件末尾,最后使用file:close函数关闭文件。
1>{ok,S}= file:open("datal.dat",read).
{ok, <0.36.0>}
2>io:read(S, '').
{ok , {person, "joe",
"armstrong",
[{occupation, programmer} ,{favoriteLanguage,erlang}]}}
3>io:read(S,'').
{ok ,icat,iname , "zorro"} ,{owner , "joe"}}}
4>io:read(S, '').
eof
5>file:close(S)
何定义file: consult
consult(File) ->
case file:open(File, read) of
{ok, S} ->
Val = consultl(S), file:close(S),
{ok, Val};
{error, Why} ->
{error, Why}
end.
consult1(S) ->
case io:read(S, '') of
{ok, Term} -> [Term | consult1(S)];
eof -> [];
Error -> Error
end.
写入文件的不同方法。
unconsult(File, L) ->
{ok, S} = file:open(File, write),
lists:foreach(fun(X) -> io:format(S, "~p.~n", [X]) end, L),
file:close(S).
在shell中用如下的命令来创建test1.dat文件:
1> lib misc:unconsult("test1.dat" ,
[{cats , ["zorrow" , "daisy"]},
{weather , snowing}]).
ok
测试
2>file:consu1t("test1.dat").
{ok, [{cats,["zorrow" , "daisy"]} , {weather , snowing}]}
向文件中写入一行
1> {ok,S}= file:open("test2.dat", write) .
{ok,<0.62.0>}
2> io: format(S,"~s~n",["He1lo readers"]).
ok
3>io:format(S,"~w~n",[123]).
ok
4>io:format(S, "~s~n",["that's it"]).
ok
5>file:close(S).