【2】文件编程(二)、套接字编程

目录

 文件编程(二)

写入文件的各种方式

1.把各行写入文件

2.写入整个文件

3.写入随机访问文件

目录操作

文件操作

 套接字编程

一个简单的TCP服务器

顺序和并行服务器

主动和被动套接字

1.主动消息接收(非阻塞式)

2.被动消息接收(阻塞式)

3.混合消息接收(部分阻塞式)

套接字错误处理

一个UDP阶乘服务器

对多台机器广播


 文件编程(二)

写入文件的各种方式

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",
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值