### 写文件
```erlang
file:open( FileName, [append]|[write]|[read] )
file:open(?FilePath, [write, {encoding, utf8}])
tool_log( Res, State )->
{ok, S} = file:open(get_path("../doc/tool_log.txt"), [append]),
io:format( S, "~p:~n{~p, ~p}~n", [ erlang:localtime(), Res, State ]),
file:close( S ).
file:open(File, [raw, binary]).
2.file:write( IoDevice, Bytes ).
file:write_file( FileName, Bytes ). 可以保存图片
```
###读文件
```erlang
file:open( FileName, read ).
{ok,<0.547.0>}
io:read( <0.547.0>, '' ).
{ok,{1,"买星马AK-8880"}}
ile:read_file(FileName )
file:read_file( "E:\a.xml" ). {ok,<<"<xml>\r\n<name>yujian</name>\r\n</xml>">>}
file:consult( FileName )
case file:consult( Doc ) of
{ok, [FileConent]} -> FileConent;
Other -> Other
end.
file:consult可以直接把文件中的Erlang项读取出来
file:list_dir(Docs) 列出当先文件夹下所有的子目录及文件
file:make_dir(Docs) 创建一个新的目录
{ok, S} = file:open( "D:/project/minertwo/doc/countrys.txt", [read] ).
io:get_line( S, '' ).
"中国 蒙古 朝鲜 韩国 日本\n"
"菲律宾\t越南\t老挝\t柬埔寨\t缅甸\t泰国\t马来西亚\t文莱\t新加坡\t印度尼西亚\t东帝汶\t\t\t\t\t\t\t\t\n"
file:delete( Path ).
file:del_dir(Dir)
filelib:is_file( Path ) 判断是否是一个文件
```
Erlang用于操纵文件I/O的模块有:
file模块:打开、读、写、关闭文件已经操作目录的方法基本都在这里
filename模块:提供平台独立方式用于操纵文件名
filelib模块:file模块的扩展,提供了更多的实用工具,在file模块基础上构建
io模块:一系列用于操作打开的文件的方法,解析格式、格式化输出等等。
1.打开文件:
```erlang
{ok,F}=file:open("data1.dat",read). %读模式打开
{ok,F}=file:open("data1.dat",write). %写模式
{ok,F}=file:open("data1.dat",[read,write]). %读、写、二进制模式
```
支持的所有模式参见文档。
2.读取:
```erlang
(1)如果以一个Erlang term的方式读取,采用:
io:read(F,'').
其中第二个参数是提示符,用于在标准输入时作为提示。
这个方法有一个变形read/3
read(IoDevice, Prompt, StartLine)
第三个参数用于指定开始行数。
(2)如果是按字节读取,文件必须按raw模式打开采用:
{ok, Data}=file:read(F,100).
(3)按行读取:
io:get_line(F, '').
(4)读取整个文件的内容:
{ok,Binary}=file:read_file("data1.dat").
%%注意返回的是一个binary类型
(5)随机读取:
{ok,Binary}=file:pread(F, 22, 46).
%%其中第二个参数是开始位置,第三个参数是读取的长度,返回的也是binary类型。
```
3.写入文件:
```erlang
(1)采用io:format/3方法:
{ok, S} = file:open("test2.dat", write).
io:format(S, "~s~n", ["Hello readers"]).
io:format(S, "~w~n", [123]).
%%其中的~开头的字符是一个个格式化命令,比如常见的:
~c anscii码
~f 浮点数
~s 字符串
~w Erlang term
~p 与~w类似,不过当多行时将自动换行
~n 显然,换行符
(2)写入整个文件:
file:write_file(File, IO)
其中IO可以为list、integer或者binary类型
(3)随机写入:
file:pwrite(F, 10, <<"new">>)
```
4.关闭文件:
```erlang
file:close(F).
```
5.目录操作:
```erlang
都是linux命令风格的操作,
cd("/home/dennis/"). %进入目录
file:list_dir("."). %列出当前目录文件
file:make_dir("test"). %创建test目录
file:del_dir("test"). %删除test目录
```
6.获取文件信息,比如文件大小,最后修改时间等等。
```erlang
%%调用file:read_file_info/1方法,该方法返回一个file_info记录类型,里面拥有文件的具体信息,比如type、size等。
{ok, Facts} =file:read_file_info(File).
io:format("~s~n",{Facts#file_info.type, Facts#file_info.size}).
```
复制和删除文件:
```erlang
file:copy(Source, Destination).
file:delete(File).
```


- 1.学习
- 1.1安装与运行环境
- 1.2编辑器、集成开发环境与其它工具
- 1.3代码编译运行
- 2.基础
- 2.1 Erlang终端
- 2.2 基础语法
- 2.2.1 异常处理
- 2.3 数据类型
- 2.4 操作符
- 2.5 模块属性
- 3.库函数
- 3.1 常用模块
- 3.2 OTP模块
- 3.2.1 函数
- 3.2.2 receive
- 3.2.3 .app.src文件
- 3.2.4 _app.erl
- 3.2.5 _sup.erl
- 3.2.6 gen_server
- 3.2.7 gen_fsm
- 3.3 erts
- 3.3.1 init
- 3.3.2 BIF
- 3.3.3 NIF
- 3.4 kernel
- 3.4.1 code_server
- 3.4.2 inet
- 3.4.3 net_kernel
- 3.4.4 net_adm
- 3.4.5 error_logger
- 3.4.6 global
- 3.4.7 application
- 3.5 stdlib
- 3.5.2 array
- 3.5.4 base64
- 3.5.5 binary
- 3.5.6 c
- 3.5.8 calendar
- 3.5.9 code
- 3.5.11 dict
- 3.5.12 erl_
- 3.5.13 file
- 3.5.14 filelib
- 3.5.15 gb_trees
- 3.5.16 gb_sets
- 3.5.17 gen_tcp
- 3.5.18 gen_server
- 3.5.19 httpc
- 3.5.20 init_parse
- 3.5.21 init
- 3.5.22 inet
- 3.5.23 io
- 3.5.24 lists
- 3.5.25 maps
- 3.5.26 os
- 3.5.27 ordsets
- 3.5.28 proplists
- 3.5.29 queue
- 3.5.30 qlc
- 3.5.31 re
- 3.5.32 random
- 3.5.33 rfc4627-json
- 3.5.34 string
- 3.5.35 ssh
- 3.5.36 soft
- 3.5.37 sets
- 3.5.38 supervisor
- 3.5.39 tuple
- 3.5.40 timer
- 3.5.41 unicode
- 3.5.42 cpu
- 3.5.43 math
- 3.5.44 zip
- 3.5.45 shell
- 3.6 SASL
- 3.7 asn1
- 3.8 compiler
- 3.9 tools
- 3.10 OS_Mon
- 3.11 crypto
- 3.12 Port
- 4.工具
- 4.1 Erlang预处理器
- 4.2 Erlang节点
- 4.3 Erlang多节点
- 4.3.1主从节点
- 4.4 Epmd
- 4.5 断点工具
- 4.6 dialyzer
- 4.7 dbg-debug 模块
- 4.7.1 dbg
- 4.8 Erlang跟踪工具
- 4.9 etop
- 4.10 profiling
- 4.10.1 fprof
- 4.10.2 eprof
- 4.10.3 cprof
- 5.进阶
- 5.1 TCP粘包、大小端
- 5.2 rebar发布系统
- 5.3 ErlangVM 心跳
- 5.4 Erlang GC
- 5.5 Erlang Time
- 5.6 Erlang 启动
- 5.6.1 SASL配置
- 5.7 Erlang系统限制
- 6.项目
- 6.1 the_seed
- 6.2 network
- 6.3 parse_tool
- 6.4 cache
- 7.项目研究
- 7.1 Mnesia
- 7.1.1 Mnesia模式
- 7.1.2 Mnesia操作
- 7.1.3 Mnesia增删改查
- 7.1.4 Mnesia过载分析
- 7.1.5 Mnesia高级特性
- 7.1.6 分布式
- 7.1.7 Mnesia表分片
- 7.1.8 Mnesia锁
- 7.1.9 dets
- 7.1.10 ets
- 7.2 Ejabberd
- 7.2.1 mod_echo.erl
- 7.2.2 hooks for module developers
- 7.2.3 Events list
- 7.3 cowboy
- 7.4 rebar
- 7.4.1 rebar Wiki
- 7.4.2 rebar.config.script
- 7.5 RIAK CS
- 7.6 Leofs
- 7.6.1 简介
- 8.资料整理
- 8.1 资料
- 8.1.1 Erlang的调度原理
- 8.1.2 虚拟机代码执行原理
- 8.1.3 SMP
- 8.2 杂记
- 8.2.1 设计