筆記 erlang檔案操作

2021-09-01 18:22:51 字數 3020 閱讀 5010

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\x.txt

ok10> filelib:ensure_dir("doc").

ok11> filelib:ensure_dir("cc").

ok

文件中解釋是返回ok代表在在所有的父目錄中存在或可以建立這個以輸入為檔名的檔案或者資料夾

錯誤的話返回代表不存在也不能被建立

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 ,} true

./fibo.erl 195 ,} true

./iotest.erl 140 ,} true

./message.erl 805 ,} true

./procedure.erl 383 ,} true

./recode_test.erl 180 ,} true

./show_ip.erl 180 ,} true

ok

以上**對中文支援不行(不會顯示中文 會打出string的list 所以那個~20s應該換為~p比較合適) 不會列印出資料夾(要全部列印可以通過wildcard匹配*之類的完成)

資料夾的is_file/1返回的也是true 而不是false 要判斷直接用is_dir/1

filename的doc裡密密麻麻都是例子我就懶得自己動手了...

file模組的操作不怎麼麻煩

舉幾個例子:

資料夾建立刪除:

59> file:del_dir("cc").

ok60> file:make_dir("cc").

ok

讀取檔案:

可以用read_file/1 指定一下檔案路徑和檔名一口氣讀完 也可以用read/2 用read/2之前要對檔案進行open操作獲得iodevice:

64> =file:open("fibo.erl",[raw,read]).

}}65> =file:read(file,filelib:file_size("fibo.erl")).

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).

寫檔案也一樣簡單:

71> file.write(file,<<"hello 你好")>).

* 1: syntax error before: '.'

71> file:write(file,<<"hello 你好")>).

* 1: syntax error before: ')'

71> file:write(file,<<"hello 你好">>).

ok72> file:close(file).

ok注意open的引數有很多 這邊不一一枚舉 file模組很多操作都和平台有關.

這邊還有乙個方便使用的read_line/1函式:

77> file:read_line(file).

78> file:read_line(file).

79> file:read_line(file).

80> file:read_line(file).

81> file:read_line(file).

82> file:read_line(file).

83> file:read_line(file).

84> file:read_line(file).

85> file:read_line(file).

86> file:read_line(file).

87> file:read_line(file).

88> file:read_line(file).

89> file:read_line(file).

eof90> file:read_line(file).

eof

不太友好返回了個\n可以用正則處理掉 \\n$

Erlang 檔案處理(讀書筆記)

今天看了下erlang file章節,內容感覺比較散,現在做個筆記 檔案操作主要有4個module b file b 這個模組主要提供對檔案基本操作的方法 譬如,開啟關閉檔案,讀寫檔案內容等等 b filename b 這個模組提供跨平台處理檔名的方法 即,你不用關心你的 是執行在linux平台還是...

《Erlang程式設計》 筆記

語法 1.模式匹配 表示乙個模式匹配操作。lhs rhs實際上是這樣乙個過程,對右端求值 rhs 然後將結果與左端 lhs 進行模式匹配。2.分號 逗號 用來分隔函式呼叫,資料構造器以及模式中的引數。句號 後跟乙個空白符號 用來在shell中分隔完整的函式和表示式。分號 用來分隔字句。如分段的函式定...

Erlang學習筆記(二)

今天在練習map對映組的時候 本人erlang版本17.01 根據 erlang程式設計 第二版這本書上操作,在取值的時候發現問題,如下 書中操作 如下圖 明顯兩個程式執行不一樣,後來看到官方文件,才發現是這個樣子 在上圖中明確指出,在map對映組中取值的時候用 取值,後來又看了看兩者區別發現兩者只...