鍍金池/ 教程/ C/ Lua文件I/O
Lua邏輯運算符
Lua其他運算符
Lua協(xié)同程序
Lua break語句
Lua運算符
Lua面向對象
Lua教程
Lua函數(shù)
Lua數(shù)據(jù)庫/MySQL操作
Lua關系運算符
Lua錯誤處理
Lua數(shù)據(jù)類型
Lua嵌套循環(huán)
Lua變量
Lua基本語法
Lua字符串
Lua for循環(huán)
Lua if語句嵌套
Lua運算符優(yōu)先級
Lua Web編程
Lua while循環(huán)
Lua開發(fā)環(huán)境
Lua if...else語句
Lua標準庫
Lua游戲編程
Lua if語句
Lua算術運算符
Lua表格
Lua決策
Lua文件I/O
Lua循環(huán)
Lua數(shù)組
Lua元表
Lua repeat...until循環(huán)
Lua迭代器
Lua調試
Lua模塊
Lua垃圾收集

Lua文件I/O

Lua中I/O庫用于讀取和處理文件。有兩種類型的文件操作,在Lua即隱含文件的描述符和明確的文件描述符。

對于下面的例子中,我們將使用一個示例文件test.lua,如下圖所示。

-- sample test.lua
-- sample2 test.lua

一個簡單的文件打開操作使用下面的語句。

file = io.open (filename [, mode])

各種文件模式列示于下表中。

Mode 描述
"r" 只讀模式,就是打開一個現(xiàn)有的文件的默認模式。
"w" 寫使能模式將覆蓋現(xiàn)有的文件或創(chuàng)建一個新文件。
"a" 追加打開一個現(xiàn)有的文件或進行追加創(chuàng)建一個新的文件模式。
"r+" 讀寫方式為現(xiàn)有的文件。
"w+" 如果文件存在的或新的文件讀取與寫入權限創(chuàng)建的所有現(xiàn)有數(shù)據(jù)將被刪除。
"a+" 讀模式追加模式下啟用,打開一個現(xiàn)有的文件或創(chuàng)建一個新文件。

隱文件描述符

隱文件描述符使用標準輸入/輸出模式,或使用單輸入單輸出文件。使用隱式文件的描述符的一個示例如下所示。

-- Opens a file in read
file = io.open("test.lua", "r")

-- sets the default input file as test.lua
io.input(file)

-- prints the first line of the file
print(io.read())

-- closes the open file
io.close(file)

-- Opens a file in append mode
file = io.open("test.lua", "a")

-- sets the default output file as test.lua
io.output(file)

-- appends a word test to the last line of the file
io.write("-- End of the test.lua file")

-- closes the open file
io.close(file)

當運行程序,會得到test.lua文件的第一行輸出。這里例子中得到了下面的輸出。

-- Sample test.lua

這是聲明 test.lua 文件的第一行。“-- End of the test.lua file” 將被追加到test.lua代碼的最后一行

在上面的例子中可以看到隱描述與使用文件系統(tǒng)io.“×”方法是如何工作的。上面的例子使用io.read()沒有可選參數(shù)??蛇x參數(shù)可以是以下任意一個。

Mode 描述
"*n" 讀取當前文件的位置,如果存在于文件的位置返回一個數(shù)字,或返回nil。
"*a" 返回文件的所有從當前文件位置的內容。
"*l" 讀取當前文件位置的對應行,并且移動文件位置下一行。
number 讀函數(shù)中指定的字節(jié)數(shù)。

其他常見的IO方法包括:

  • io.tmpfile():  返回讀寫臨時文件,一旦程序退出,文件將被刪除。

  • io.type(file):  返回文件,關閉文件或零根據(jù)所輸入的文件。

  • io.flush(): 清除默認輸出緩沖器。

  • io.lines(optional file name): 提供了一個通用的循環(huán)迭代器遍歷文件并關閉在最后的情況下提供文件名和默認文件的文件被使用,在循環(huán)的末尾沒有關閉。

明確的文件描述符

我們經(jīng)常使用明確的文件描述符,使我們能夠在同一時間處理多個文件。這些功能都相當相似的隱式文件描述符。在這里,我們使用的文件:函數(shù)名,而不是io.function_name。同樣地隱文件描述符例的文件版本,以下示例如下所示。

-- Opens a file in read mode
file = io.open("test.lua", "r")

-- prints the first line of the file
print(file:read())

-- closes the opened file
file:close()

-- Opens a file in append mode
file = io.open("test.lua", "a")

-- appends a word test to the last line of the file
file:write("--test")

-- closes the open file
file:close()

當運行程序,會得到的隱含描述的例子是類似的輸出。

-- Sample test.lua

文件打開和參數(shù)進行讀取外部描述的所有的模式是一樣的隱含文件的描述符。

其他常見的文件的方法包括:

  • file:seek(optional whence, optional offset): 參數(shù)"set", "cur" 或 "end"。設置新的文件指針從文件的開始更新的文件的位置。偏移量是零基礎的這個功能。從如果第一個參數(shù)是“set”該文件的開始時所測的偏移量;從如果它是“cur” 文件中的當前位置;或從該文件的結束,如果是“end”。默認參數(shù)值是“cur”和0,因此當前的文件位置可以通過調用不帶參數(shù)這個函數(shù)來獲得。

  • file:flush(): 清除默認輸出緩沖器。

  • io.lines(optional file name): 提供了一個通用的循環(huán)迭代器遍歷文件并關閉在最后的情況下提供文件名和默認文件的文件被使用,在循環(huán)的末尾沒有關閉。

一個例子,以使用尋求方法如下所示。offsets從25個位置的光標之前的文件的末尾。從文件的讀出功能的打印剩余 seek 位置。

-- Opens a file in read
file = io.open("test.lua", "r")

file:seek("end",-25)
print(file:read("*a"))

-- closes the opened file
file:close()

會得到類似下面的一些輸出。

 sample2 test.lua
--test

可以使用各種不同的模式和參數(shù)了解 Lua文件操作能力。


上一篇:Lua數(shù)組下一篇:Lua調試