erlang用于操縱檔案i/o的子產品有:
file子產品:打開、讀、寫、關閉檔案已經操作目錄的方法基本都在這裡
filename子產品:提供平台獨立方式用于操縱檔案名
filelib子產品:file子產品的擴充,提供了更多的實用工具,在file子產品基礎上建構
io子產品:一系列用于操作打開的檔案的方法,解析格式、格式化輸出等等。
1.打開檔案:
{ok,f}=file:open("data1.dat",read). %讀模式打開
{ok,f}=file:open("data1.dat",write). %寫模式
{ok,f}=file:open("data1.dat",[read,write]). %讀、寫、二進制模式
支援的所有模式參見文檔。
2.讀取:
(1)如果以一個erlang term的方式讀取,采用:
io:read(f,'').
其中第二個參數是提示符,用于在标準輸入時作為提示。
這個方法有一個變形read/3
<a><code>read(iodevice, prompt, startline)</code></a>
第三個參數用于指定開始行數。
(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.寫入檔案:
(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 字元串
~p 與~w類似,不過當多行時将自動換行
~n 顯然,換行符
(2)寫入整個檔案:
file:write_file(file, io)
其中io可以為list、integer或者binary類型
(3)随機寫入:
file:pwrite(f, 10, <<"new">>)
4.關閉檔案:
file:close(f).
5.目錄操作:
都是linux指令風格的操作,
cd("/home/dennis/"). %進入目錄
file:list_dir("."). %列出目前目錄檔案
file:make_dir("test"). %建立test目錄
file:del_dir("test"). %删除test目錄
6.擷取檔案資訊,比如檔案大小,最後修改時間等等。調用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}).
7.複制和删除檔案:
file:copy(source, destination).
file:delete(file).
這個筆記僅僅記錄了一些常用到的方法,一些進階的工具方法并沒有涉及,具體參考erlang的文檔。
文章轉自莊周夢蝶 ,原文釋出時間2007-09-27