目录
文件编程(二)
写入文件的各种方式
1.把各行写入文件
io:format承担了创建格式化输出的重任。要生成格式化输出,我们会做以下调用。
-spec io:format(IoDevice, Format, Args) -> ok.
%% 其中ioDevice是一个I/O对象(必须以write模式打开),Format是一个包含格式代码的字符串,Args是待输出的项目列表。
Args里的每一项都必须对应格式字符串里的某个格式命令。格式命令以一个波浪字符(~)开头。
1> {ok, S} = file:open("test.dat", write).
{ok,<0.87.0>}
2> io:format(S, "~s~n", ["hello"]).
ok
3> io:format(S, "~s~n", [hello]).
ok
4> io:format(S, "~p~n", [123]).
ok
5> io:format(S, "~p", [7]).
ok
6> io:format(S, "~p~n", [8]).
ok
7>
得到文件test.dat
hello
hello
123
78
2.写入整个文件
file:write_file(File, IO)会把IO里的数据(一个I/O列表)写入File。
I/O列表是一个元素为I/O列表、二进制型或0到255整数的列表。
I/O列表在输出时会被自动“扁平化”,意思是所有的列表括号都会被移除。
3.写入随机访问文件
file:pwrite(IoDev, Position, Bin) 和随机访问读相似。
1> {ok, S} = file:open("test.dat", [raw, write, binary]).
{ok,{file_descriptor,prim_file,
#{handle => #Ref<0.3645283694.4081713185.82801>,
owner => <0.85.0>,
r_buffer => #Ref<0.3645283694.4081713160.83160>,
r_ahead_size => 0}}}
2> file:pwrite(S, 3, <<"new">>).
ok
3>file:pwrite(S, 10, <<"10">>).
ok
在刚才有内容的文件中写入:第一次写会清除原文件中所有内容(试出来是这样)
在idea中显示:
复制到文本实际上其中有空格:
new 10
目录操作
list_dir(Dir) 用来生成一个Dir里的文件列表
make_dir(Dir) 创建一个新目录
del_dir(Dir) 删除一个目录。
6> file:list_dir(".").
{ok,["data1.dat","demo1.erl","test.dat"]}
7> file:make_dir("abc").
ok
8> file:list_dir(".").
{ok,["abc","data1.dat","demo1.erl","test.dat"]}
9> file:del_dir("abc").
ok
10> file:list_dir(".").
{ok,["data1.dat","demo1.erl","test.dat"]}
11> file:del_dir("test.dat").
{error,enotdir}
文件操作
file:read_file_info(F) F是一个合法的文件或目录名,返回{ok, Info}。Info是一个#file_info类型的记录。
filelib:file_size(File) 获取文件或目录大小
filelib:is_dir(X) 判断是否是目录
file:copy(Source, Destination) 把文件Source复制到Destination(包含复制后文件名)里。返回{ok, 文件大小}
file:delete(File) 删除File。
3> file:list_dir(".").
{ok,["a","data1.dat","demo1.erl","test.dat"]}
4> file:read_file_info("data1.dat").
{ok,{file_info,185,regular,read_write,
{
{2023,7,7},{20,14,44}},
{
{2023,7,6},{22,5,34}},
{
{2023,7,6},{21,54,57}},
33206,1,4,0,0,0,0}}
5> file:read_file_info("a").
{ok,{file_info,0,directory,read_write,
{
{2023,7,11},{20,23,23}},
{
{2023,7,11},{20,23,23}},
{
{2023,7,11},{20,23,23}},
16895,1,4,0,0,0,0}}
6> filelib:file_size("data1.dat").
185
7> filelib:file_size("a").
0
8> filelib:is_dir("a").
true
9> file:copy("data1.dat",