国产chinesehdxxxx野外,国产av无码专区亚洲av琪琪,播放男人添女人下边视频,成人国产精品一区二区免费看,chinese丰满人妻videos

Lua 文件 I/O

2022-06-25 15:20 更新

Lua I/O 庫(kù)用于讀取和處理文件。分為簡(jiǎn)單模式(和C一樣)、完全模式。

  • 簡(jiǎn)單模式(simple model)擁有一個(gè)當(dāng)前輸入文件和一個(gè)當(dāng)前輸出文件,并且提供針對(duì)這些文件相關(guān)的操作。
  • 完全模式(complete model) 使用外部的文件句柄來(lái)實(shí)現(xiàn)。它以一種面對(duì)對(duì)象的形式,將所有的文件操作定義為文件句柄的方法

簡(jiǎn)單模式在做一些簡(jiǎn)單的文件操作時(shí)較為合適。但是在進(jìn)行一些高級(jí)的文件操作的時(shí)候,簡(jiǎn)單模式就顯得力不從心。例如同時(shí)讀取多個(gè)文件這樣的操作,使用完全模式則較為合適。

打開(kāi)文件操作語(yǔ)句如下:

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

mode 的值有:

模式描述
r 以只讀方式打開(kāi)文件,該文件必須存在。
w 打開(kāi)只寫(xiě)文件,若文件存在則文件長(zhǎng)度清為0,即該文件內(nèi)容會(huì)消失。若文件不存在則建立該文件。
a 以附加的方式打開(kāi)只寫(xiě)文件。若文件不存在,則會(huì)建立該文件,如果文件存在,寫(xiě)入的數(shù)據(jù)會(huì)被加到文件尾,即文件原先的內(nèi)容會(huì)被保留。(EOF符保留)
r+ 以可讀寫(xiě)方式打開(kāi)文件,該文件必須存在。
w+ 打開(kāi)可讀寫(xiě)文件,若文件存在則文件長(zhǎng)度清為零,即該文件內(nèi)容會(huì)消失。若文件不存在則建立該文件。
a+ 與a類似,但此文件可讀可寫(xiě)
b 二進(jìn)制模式,如果文件是二進(jìn)制文件,可以加上b
+ 號(hào)表示對(duì)文件既可以讀也可以寫(xiě)

簡(jiǎn)單模式

簡(jiǎn)單模式使用標(biāo)準(zhǔn)的 I/O 或使用一個(gè)當(dāng)前輸入文件和一個(gè)當(dāng)前輸出文件。

以下為 file.lua 文件代碼,操作的文件為test.lua(如果沒(méi)有你需要?jiǎng)?chuàng)建該文件),代碼如下:

-- 以只讀方式打開(kāi)文件
file = io.open("test.lua", "r")

-- 設(shè)置默認(rèn)輸入文件為 test.lua
io.input(file)

-- 輸出文件第一行
print(io.read())

-- 關(guān)閉打開(kāi)的文件
io.close(file)

-- 以附加的方式打開(kāi)只寫(xiě)文件
file = io.open("test.lua", "a")

-- 設(shè)置默認(rèn)輸出文件為 test.lua
io.output(file)

-- 在文件最后一行添加 Lua 注釋
io.write("--  test.lua 文件末尾注釋")

-- 關(guān)閉打開(kāi)的文件
io.close(file)

執(zhí)行以上代碼,你會(huì)發(fā)現(xiàn),輸出了 test.ua 文件的第一行信息,并在該文件最后一行添加了 lua 的注釋。如我這邊輸出的是:

-- test.lua 文件

在以上實(shí)例中我們使用了 io."x" 方法,其中 io.read() 中我們沒(méi)有帶參數(shù),參數(shù)可以是下表中的一個(gè):

模式描述
"*n" 讀取一個(gè)數(shù)字并返回它。例:file.read("*n")
"*a" 從當(dāng)前位置讀取整個(gè)文件。例:file.read("*a")
"*l"(默認(rèn))讀取下一行,在文件尾 (EOF) 處返回 nil。例:file.read("*l")
number返回一個(gè)指定字符個(gè)數(shù)的字符串,或在 EOF 時(shí)返回 nil。例:file.read(5)

其他的 io 方法有:

  • io.tmpfile():返回一個(gè)臨時(shí)文件句柄,該文件以更新模式打開(kāi),程序結(jié)束時(shí)自動(dòng)刪除

  • io.type(file): 檢測(cè)obj是否一個(gè)可用的文件句柄

  • io.flush(): 向文件寫(xiě)入緩沖中的所有數(shù)據(jù)

  • io.lines(optional file name): 返回一個(gè)迭代函數(shù),每次調(diào)用將獲得文件中的一行內(nèi)容,當(dāng)?shù)轿募矔r(shí),將返回nil,但不關(guān)閉文件


完全模式

通常我們需要在同一時(shí)間處理多個(gè)文件。我們需要使用 file:function_name 來(lái)代替 io.function_name 方法。以下實(shí)例演示了如同同時(shí)處理同一個(gè)文件:

-- 以只讀方式打開(kāi)文件
file = io.open("test.lua", "r")

-- 輸出文件第一行
print(file:read())

-- 關(guān)閉打開(kāi)的文件
file:close()

-- 以附加的方式打開(kāi)只寫(xiě)文件
file = io.open("test.lua", "a")

-- 在文件最后一行添加 Lua 注釋
file:write("--test")

-- 關(guān)閉打開(kāi)的文件
file:close()

執(zhí)行以上代碼,你會(huì)發(fā)現(xiàn),輸出了 test.ua 文件的第一行信息,并在該文件最后一行添加了 lua 的注釋。如我這邊輸出的是:

-- test.lua 文件

read 的參數(shù)與簡(jiǎn)單模式一致。

其他方法:

  • file:seek(optional whence, optional offset): 設(shè)置和獲取當(dāng)前文件位置,成功則返回最終的文件位置(按字節(jié)),失敗則返回nil加錯(cuò)誤信息。參數(shù) whence 值可以是:

    • "set": 從文件頭開(kāi)始
    • "cur": 從當(dāng)前位置開(kāi)始[默認(rèn)]
    • "end": 從文件尾開(kāi)始
    • offset:默認(rèn)為0
    不帶參數(shù)file:seek()則返回當(dāng)前位置,file:seek("set")則定位到文件頭,file:seek("end")則定位到文件尾并返回文件大小
  • file:flush(): 向文件寫(xiě)入緩沖中的所有數(shù)據(jù)

  • io.lines(optional file name): 打開(kāi)指定的文件filename為讀模式并返回一個(gè)迭代函數(shù),每次調(diào)用將獲得文件中的一行內(nèi)容,當(dāng)?shù)轿募矔r(shí),將返回nil,并自動(dòng)關(guān)閉文件。
    若不帶參數(shù)時(shí)io.lines() io.input():lines(); 讀取默認(rèn)輸入設(shè)備的內(nèi)容,但結(jié)束時(shí)不關(guān)閉文件,如

    for line in io.lines("main.lua") do
    
      print(line)
    
      end
    

以下實(shí)例使用了 seek 方法,定位到文件倒數(shù)第 25 個(gè)位置并使用 read 方法的 *a 參數(shù),即從當(dāng)期位置(倒數(shù)第 25 個(gè)位置)讀取整個(gè)文件。

-- 以只讀方式打開(kāi)文件
file = io.open("test.lua", "r")

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

-- 關(guān)閉打開(kāi)的文件
file:close()

我這邊輸出的結(jié)果是:

st.lua 文件末尾--test


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)