Erlang 檔案處理(讀書筆記)

2021-09-01 14:54:32 字數 2345 閱讀 4104

今天看了下erlang file章節,內容感覺比較散,現在做個筆記:

檔案操作主要有4個module

[b]file [/b]: 這個模組主要提供對檔案基本操作的方法(譬如,開啟關閉檔案,讀寫檔案內容等等)

[b]filename[/b] : 這個模組提供跨平台處理檔名的方法(即,你不用關心你的**是執行在linux平台還是windows平台)

[b]filelib[/b] : 這個模組其實是file module的擴充套件,它提供了一些更常用的方法(即,對file模組中一些方法進行封裝,從而提供更簡便方法)

[b]io[/b] : 這個模組用來讀取和寫入資料

[b]讀檔案[/b]

1. file:consult(filename) -> |

該方法用來從檔案讀取[b]erlang terms[/b](注意檔案中的每個term要用[b] .[/b] 分隔,如下圖)

[img]

我們使用consult方法來讀取該檔案:

[img]

現在我們看下consult方法的實現原始碼(使用code:which(file)命令查詢原始碼位置):

[img]

其中:file:open方法用來開啟檔案,其完整定義為:file:open(filename, modes) -> |

file:close方法用來關閉檔案,其完整定義為:file:close(iodevice) -> ok |

實現原理:通過[b]io:read[/b]方法迴圈讀取檔案中的[b]erlang term[/b](每次讀取乙個),然後拼裝到list中(注意,consult_stream方法是乙個尾遞迴呼叫,因此不用擔心它的效率)

2.io:get_line(iodevice, prompt) -> data | eof |

該方法用來從iodevice表示的輸入裝置中(譬如檔案)讀取"[b]一行[/b]"資料,看個簡單例子

[img]

3.file: read_file(filename) -> |

該方法用會將整個檔案讀入記憶體,然後以位元組流(二進位制)的形式返回檔案內容([b]這是一種非常高效讀取檔案的一種方式,但是若記憶體不夠,會報錯[/b])

[img]

4.file:pread(iodevice, location, number) -> | eof |

提供隨機訪問功能,從位置location開始讀取number數量的位元組

[b]寫檔案[/b]

1.format(iodevice, format, data) -> ok

這個方法很easy,就是把data按照format指定的輸出格式,輸出到iodeveice中去(注意:iodevice必須要以write模式開啟)

常用的格式符有:~n(輸出換行符),~s(輸出字串),~w與~p(輸出erlang term,目前我還不清楚兩者區別)

2.write_file(filename, bytes) -> ok |

這個方法用來高效的將位元組流寫入檔案,我們看個簡單例子

[img]

[b]目錄操作[/b]

1.file模組有三個方法來操作目錄,他們分別是:list_dir(dir),mark_dir(dir),del_dir(dir)(只能刪除空目錄),我們簡單看下它們的使用例子:

[img]

其中file:list_dir(".")中的. 代表當前目錄

現在假設,我們需要知道乙個檔案(目錄)的名字,建立時間,以及大小該怎麼半呢? 答案:呼叫file:read_file_info方法即可

[img]

read_file_info返回的是乙個資訊全量,它的每個值代表的含義如下:

[img]

但是,通常我們只需要其中的某些或者某個值(譬如,我只想知道ebin/data.dat檔案的大小),這時候,我們就需要利用record file_info,若我們需要使用這個record,則要在檔案開始處引入:-include_lib("kernel/include/file.hrl"). 現在假設我們要取ebin/data.dat檔案大小,則可以:

[img]

除了上面所說的方法,其實還有更簡單的方式,直接呼叫filelib:file_size方法

[img]

書中最後乙個find utility例子還是挺有意思,為了截圖方便(一屏),我將**重寫了一遍,現在貼上來:

[img]

[b]注意[/b]在呼叫file_lib:is_dir方法時,需要傳入全路徑名(不然它會以當前路徑為相對路徑),我一開始沒有注意到這一點,倒置結果總是不對

現在我們執行程式並且和linux find命令比對結果:

[img]

[url]

[url]

[url]

[url]

[url]

讀書筆記 C 檔案操作

在c 中,對檔案的操作是通過stream的子類fstream file stream 來實現的,在標頭檔案中定義 一 開啟檔案 fstream類的成員函式open 原形 void open const char filename,int mode,int access filename 開啟的檔案名...

mysql log檔案 讀書筆記1

老是上網東看看,西瞧瞧。不行啊,容易浮躁。看書算了 一,錯誤日誌檔案 error.log 記錄mysql server執行過程所有較為嚴重的警告或錯誤資訊,以及mysql server啟動和關閉的詳細資訊,預設關閉 開啟 log error file name 二,二進位制日誌binary log ...

Perl入門讀書筆記 檔案

r w x o 目前有效使用者對檔案或目錄執行許可權,o為擁有者,有效使用者指負責執行這個程式的使用者 r w x o 實際使用者許可權 e exist z 檔案存在並為空 對目錄永遠為假 s 檔案或目錄存在且沒有內容,返回值為位元組為單位的檔案大小 f 是普通檔案 d 是目錄 l 是符號鏈結 s ...