W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
File
模塊中的函數(shù)讓我們能夠像打開IO設(shè)備一樣打開文件.文件默認以二進制模式打開,需要使用IO
模塊中的IO.binread/2
和IO.binwrite/2
函數(shù)進行讀寫:
iex> {:ok, file} = File.open "hello", [:write]
{:ok, #PID<0.47.0>}
iex> IO.binwrite file, "world"
:ok
iex> File.close file
:ok
iex> File.read "hello"
{:ok, "world"}
文件也可以以:utf8
編碼打開,它會告訴File
模塊將文件中讀到的字節(jié)理解為UTF-8編碼過的字節(jié).
除了打開和讀寫文件之外,File
模塊還提供了許多文件操作函數(shù).這些函數(shù)命名和UNIX中的相對應(yīng).例如,File.rm/1
克英語刪除文件,File.mkdir/1
用于創(chuàng)建目錄,File.mkdir_p/1
用于創(chuàng)建目錄和它所有的父目錄.甚至還有File.cp_r/2
和File.rm_rf/1
,用于目錄遞歸地復(fù)制或刪除文件(復(fù)制或刪除目錄中的內(nèi)容).
你會發(fā)現(xiàn)File
模塊中的函數(shù)有兩種形式:一種是"普通"形式,一種是帶有感嘆號(!
)的形式.例如,例如,當(dāng)我們在上面的例子中讀取"hello"
文件時,我們使用File.read/1
.或者,我們可以使用File.read!/1
:
iex> File.read "hello"
{:ok, "world"}
iex> File.read! "hello"
"world"
iex> File.read "unknown"
{:error, :enoent}
iex> File.read! "unknown"
** (File.Error) could not read file unknown: no such file or directory
注意到當(dāng)文件不存在時,帶!
的版本拋出了一個錯誤.當(dāng)你想要用模式匹配來處理不同的輸入時最好使用不帶!
的版本:
case File.read(file) do
{:ok, body} -> # do something with the `body`
{:error, reason} -> # handle the error caused by `reason`
end
然而,如果你期望文件在那兒,帶感嘆號的版本就更有用,因為它會拋出一個有意義的錯誤信息.不要這樣寫:
{:ok, body} = File.read(file)
當(dāng)發(fā)生錯誤時,File.read/1
會返回{:error, reason}
,模式匹配就會失敗.你仍然會得到想要的結(jié)果(拋出錯誤),但信息會是模式不匹配(因此就不知道錯誤到底是什么了).
所以,如果你不想掌控錯誤,最好使用使用File.read!/1
.
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: