erlang关于文件操作的模块还是很多的
stdlib下有filelib filename和file_sorter
核心模块有file 当然io的一些导出函数也可以用来对文件进行读写
这里简要记下笔记
首先是filelib
9> ls(). doc factorial.beam factorial.erl fibo.beam fibo.erl head_test.hrl iotest.beam iotest.erl message.beam message.erl procedure.beam procedure.erl recode_test.beam recode_test.erl show_ip.beam show_ip.erl \x{6D4B}\x{8BD5}.txt ok 10> filelib:ensure_dir("doc"). ok 11> filelib:ensure_dir("cc"). ok
文档中解释是返回ok代表在在所有的父目录中存在或可以创建这个以输入为文件名的文件或者文件夹
错误的话返回{error, Reason}代表不存在也不能被创建
file_size/1 返回对应文件的字节数
is_dir/1 返回是否是目录
is_file/1 返回是否是文件(非目录)
is_regular 返回是否是正常文件(?)
last_modified/1 返回对应文件最后修改时间
wildcard 显示匹配通配符的文件的文件名
这些使用起来都很简单 就写一个例子:
33> filelib:fold_files(".",".*.erl",false,fun(Name,X) -> io:format("~20s ~p ~p ~p ~n",[Name,filelib:file_size(Name),filelib:last_modified(Name),fil elib:is_file(Name)]) end,0). ./factorial.erl 84 {{2013,6,22},{23,46,56}} true ./fibo.erl 195 {{2013,6,22},{22,59,39}} true ./iotest.erl 140 {{2013,6,23},{0,36,29}} true ./message.erl 805 {{2013,6,23},{15,45,51}} true ./procedure.erl 383 {{2013,6,25},{19,17,27}} true ./recode_test.erl 180 {{2013,7,1},{12,53,22}} true ./show_ip.erl 180 {{2013,6,28},{15,18,35}} true ok
以上代码对中文支持不行(不会显示中文 会打出string的list 所以那个~20s应该换为~p比较合适) 不会打印出文件夹(要全部打印可以通过wildcard匹配*之类的完成)
文件夹的is_file/1返回的也是true 而不是false 要判断直接用is_dir/1
filename的doc里密密麻麻都是例子我就懒得自己动手了...
file模块的操作不怎么麻烦
举几个例子:
文件夹建立删除:
59> file:del_dir("cc"). ok 60> file:make_dir("cc"). ok
读取文件:
可以用read_file/1 指定一下文件路径和文件名一口气读完 也可以用read/2 用read/2之前要对文件进行open操作获得IoDevice:
64> {ok,File}=file:open("fibo.erl",[raw,read]). {ok,{file_descriptor,prim_file,{#Port<0.538>,728}}} 65> {ok,Data}=file:read(File,filelib:file_size("fibo.erl")). {ok,"-module(fibo).\r\n-export([fibo/1]).\r\n\r\n%% fibo(1) -> 1;\r\n%% fibo(2) -> 1;\r\n%% fibo(N) -> fibo(N-1)+fibo(N-2).\r\n\r\nfibo(N) when N> 0 ->\r\n case N of\r\n 1 ->1;\r\n 2 ->1;\r\n _ ->fibo(N-1)+(N-2) end."} 66> Data. "-module(fibo).\r\n-export([fibo/1]).\r\n\r\n%% fibo(1) -> 1;\r\n%% fibo(2) -> 1;\r\n%% fibo(N) -> fibo(N-1)+fibo(N-2).\r\n\r\nfibo(N) when N>0 -> \r\n case N of\r\n 1 ->1;\r\n 2 ->1;\r\n _ ->fibo(N-1)+(N-2) end."
当然用完关一下..file:close(File).
写文件也一样简单:
70> {ok,File}=file:open("fibo.erl",[append]). {ok,<0.121.0>} 71> file.write(File,<<"hello 你好")>). * 1: syntax error before: '.' 71> file:write(File,<<"hello 你好")>). * 1: syntax error before: ')' 71> file:write(File,<<"hello 你好">>). ok 72> file:close(File). ok
注意open的参数有很多 这边不一一列举 file模块很多操作都和平台有关.
这边还有一个方便使用的read_line/1函数:
77> file:read_line(File). {ok,"-module(fibo).\n"} 78> file:read_line(File). {ok,"-export([fibo/1]).\n"} 79> file:read_line(File). {ok,"\n"} 80> file:read_line(File). {ok,"%% fibo(1) -> 1;\n"} 81> file:read_line(File). {ok,"%% fibo(2) -> 1;\n"} 82> file:read_line(File). {ok,"%% fibo(N) -> fibo(N-1)+fibo(N-2).\n"} 83> file:read_line(File). {ok,"\n"} 84> file:read_line(File). {ok,"fibo(N) when N>0 ->\n"} 85> file:read_line(File). {ok," case N of\n"} 86> file:read_line(File). {ok," 1 ->1;\n"} 87> file:read_line(File). {ok," 2 ->1;\n"} 88> file:read_line(File). {ok," _ ->fibo(N-1)+(N-2) end."} 89> file:read_line(File). eof 90> file:read_line(File). eof
不太友好返回了个\n可以用正则处理掉 \\n$
相关推荐
服务端采用erlang的gen_server,客户端采用java的swing组件,用界面按钮进行操作
Erlang 运行环境的安装文件,Erlang 运行环境的安装文件.
erlang 程序设计一书的笔记,帮你快速重温erlang的知识点。
ErlangB和ErlangC计算工具(exe可执行文件+excel两个) ErlangB和ErlangC计算工具(exe可执行文件+excel两个)
relx erlang 下载cowboy 时要有到的文件,在国内下载有时有问题。
erlang入门电子书 erlang编程 Introducing Erlang,作者Simon.St.Laurent
vim-erlang-标签目录贡献 这个主意vim-erlang-tags创建一个标签文件(来自Erlang源文件),Vim可以使用它。 使用Exuberant ctags或etags时,生成的标签将包含函数名称,但不会包含module:function标记。 这是一个...
erlang编程指南学习笔记,包含具体操作命令例子
rabbitMQ-3.6和erlang-17.3的安装包;windows_x64版本,包含mq及erlang的安装包,包含图文详细说明教程,即常用命令配置;
erlang 安装包
Erlang及其应用Erlang及其应用Erlang及其应用
erlang25.0 windows版本
erlang otp25 win安装包
学习RabbitMQ,需要安装运行环境, Erlang的下载实在太慢,所以下载完成后,放在这里,供大家下载,这里windiow32安装文件, 如果需要64位的或者linux下的source 文件,参考我的其他上传
erlang22最新下载包 erlang22.1.tar.gz erlang22最新下载包 erlang22最新下载包
tsung+erlang测试工具,初学者应用必备,内部放置tsung源程序文件和erlang文件
erlang官方没有龙芯版本的安装包,这个是用24版本的源码在龙芯3a5000下编译的版本,解压缩以后将bin路径加入PATH环境变量即可使用。
esl-erlang_23.0和rabbitmq-3.8.4windows版本 直接下载安装就行,可以直接下载就可安装,非常的方便...4. erlang安装后要检查能否编译成功一个helloworld文件。 5. rabbitMQ无法安装插件时非常有可能是erlang出问题了。
erlang 中文基础教程erlang 中文基础教程
Erlang并发编程,Erlang程序设计,Erlang中文手册。 学习erlang的好资料。 Erlang是一个结构化,动态类型编程语言,内建并行计算支持。最初是由爱立信专门为通信应用设计的,比如控制交换机或者变换协议等,因此...