此第一版是針對 Lua 5.0 所撰寫。雖然在很大程度上仍然適用於後續版本,但有一些差異。
第四版針對 Lua 5.3,可在 Amazon 和其他書店購買。
購買本書,您也可以 贊助 Lua 專案。
![]() |
用 Lua 程式設計 | ![]() |
第三部分。標準函式庫 第 21 章。I/O 函式庫 |
若要更進一步控制 I/O,您可以使用完整的模型。此模型中的核心概念是檔案控制代碼,它等同於 C 中的串流 (FILE*
):它代表一個開啟的檔案,並有一個目前位置。
若要開啟檔案,請使用 io.open
函式,它模擬 C 中的 fopen
函式。它接收檔案名稱和模式字串作為引數。模式字串可能包含 `r
´(用於讀取)、`w
´(用於寫入,同時也會清除檔案中的所有先前內容)或 `a
´(用於附加),以及一個用於開啟二進位檔案的選用 `b
´。open
函式會傳回檔案的新控制代碼。如果發生錯誤,open
會傳回 nil,以及一個錯誤訊息和錯誤號碼
print(io.open("non-existent file", "r")) --> nil No such file or directory 2 print(io.open("/etc/passwd", "w")) --> nil Permission denied 13錯誤號碼的詮釋取決於系統。
檢查錯誤的典型慣用語法是
local f = assert(io.open(filename, mode))如果
open
失敗,錯誤訊息會作為 assert
的第二個引數,然後顯示訊息。
開啟檔案後,您可以使用 read
/write
方法來讀取或寫入檔案。它們類似於 read
/write
函式,但您使用冒號語法在檔案控制代碼上呼叫它們作為方法。例如,若要開啟檔案並讀取所有內容,您可以使用下列程式碼區塊
local f = assert(io.open(filename, "r")) local t = f:read("*all") f:close()
I/O 函式庫也提供三個預先定義的 C 串流的控制代碼:io.stdin
、io.stdout
和 io.stderr
。因此,您可以使用下列程式碼將訊息直接傳送至錯誤串流
io.stderr:write(message)
我們可以將完整的模型與簡易模型混合使用。我們呼叫 io.input()
(不帶引數)來取得目前的輸入檔案控制代碼。我們使用 io.input(handle)
呼叫來設定目前的輸入檔案控制代碼。(類似的呼叫也適用於 io.output
。)例如,如果您想要暫時變更目前的輸入檔案,您可以撰寫類似下列的程式碼
local temp = io.input() -- save current file io.input("newinput") -- open a new current file ... -- do something with new input io.input():close() -- close current file io.input(temp) -- restore previous current file
版權所有 © 2003–2004 Roberto Ierusalimschy。保留所有權利。 | ![]() |