99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

OpenResty Lua 文件操作

2021-10-08 14:40 更新

Lua I/O 庫提供兩種不同的方式處理文件:隱式文件描述,顯式文件描述。

這些文件 I/O 操作,在 OpenResty 的上下文中對事件循環(huán)是會產生阻塞效應。OpenResty 比較擅長的是高并發(fā)網(wǎng)絡處理,在這個環(huán)境中,任何文件的操作,都將阻塞其他并行執(zhí)行的請求。實際中的應用,在 OpenResty 項目中應盡可能讓網(wǎng)絡處理部分、文件 I/0 操作部分相互獨立,不要揉和在一起。

隱式文件描述

設置一個默認的輸入或輸出文件,然后在這個文件上進行所有的輸入或輸出操作。所有的操作函數(shù)由 io 表提供。

打開已經(jīng)存在的 test1.txt 文件,并讀取里面的內容
file = io.input("test1.txt")    -- 使用 io.input() 函數(shù)打開文件

repeat
    line = io.read()            -- 逐行讀取內容,文件結束時返回nil
    if nil == line then
        break
    end
    print(line)
until (false)

io.close(file)                  -- 關閉文件

--> output
my test file
hello
lua
在 test1.txt 文件的最后添加一行 "hello world"
file = io.open("test1.txt", "a+")   -- 使用 io.open() 函數(shù),以添加模式打開文件
io.output(file)                     -- 使用 io.output() 函數(shù),設置默認輸出文件
io.write("\nhello world")           -- 使用 io.write() 函數(shù),把內容寫到文件
io.close(file)

在相應目錄下打開 test1.txt 文件,查看文件內容發(fā)生的變化。

顯式文件描述

使用 file:XXX() 函數(shù)方式進行操作, 其中 file 為 io.open() 返回的文件句柄。

打開已經(jīng)存在的 test2.txt 文件,并讀取里面的內容
file = io.open("test2.txt", "r")    -- 使用 io.open() 函數(shù),以只讀模式打開文件

for line in file:lines() do         -- 使用 file:lines() 函數(shù)逐行讀取文件
   print(line)
end

file:close()

-->output
my test2
hello lua
在 test2.txt 文件的最后添加一行 "hello world"
file = io.open("test2.txt", "a")  -- 使用 io.open() 函數(shù),以添加模式打開文件
file:write("\nhello world")       -- 使用 file:write() 函數(shù),在文件末尾追加內容
file:close()

在相應目錄下打開 test2.txt 文件,查看文件內容發(fā)生的變化。

文件操作函數(shù)

io.open (filename [, mode])

按指定的模式 mode,打開一個文件名為 filename 的文件,成功則返回文件句柄,失敗則返回 nil 加錯誤信息。模式:

模式含義文件不存在時
"r"讀模式 (默認)返回nil加錯誤信息
"w"寫模式創(chuàng)建文件
"a"添加模式創(chuàng)建文件
"r+"更新模式,保存之前的數(shù)據(jù)返回nil加錯誤信息
"w+"更新模式,清除之前的數(shù)據(jù)創(chuàng)建文件
"a+"添加更新模式,保存之前的數(shù)據(jù),在文件尾進行添加創(chuàng)建文件

模式字符串后面可以有一個 'b',用于在某些系統(tǒng)中打開二進制文件。

注意 "w" 和 "wb" 的區(qū)別

  • "w" 表示文本文件。某些文件系統(tǒng)(如 Linux 的文件系統(tǒng))認為 0x0A 為文本文件的換行符,Windows 的文件系統(tǒng)認為 0x0D0A 為文本文件的換行符。為了兼容其他文件系統(tǒng)(如從 Linux 拷貝來的文件),Windows 的文件系統(tǒng)在寫文件時,會在文件中 0x0A 的前面加上 0x0D。使用 "w",其屬性要看所在的平臺。
  • "wb" 表示二進制文件。文件系統(tǒng)會按純粹的二進制格式進行寫操作,因此也就不存在格式轉換的問題。(Linux 文件系統(tǒng)下 "w" 和 "wb" 沒有區(qū)別)

file:close ()

關閉文件。注意:當文件句柄被垃圾收集后,文件將自動關閉。句柄將變?yōu)橐粋€不可預知的值。

io.close ([file])

關閉文件,和 file:close() 的作用相同。沒有參數(shù) file 時,關閉默認輸出文件。

file:flush ()

把寫入緩沖區(qū)的所有數(shù)據(jù)寫入到文件 file 中。

io.flush ()

相當于 file:flush(),把寫入緩沖區(qū)的所有數(shù)據(jù)寫入到默認輸出文件。

io.input ([file])

當使用一個文件名調用時,打開這個文件(以文本模式),并設置文件句柄為默認輸入文件; 當使用一個文件句柄調用時,設置此文件句柄為默認輸入文件; 當不使用參數(shù)調用時,返回默認輸入文件句柄。

file:lines ()

返回一個迭代函數(shù), 每次調用將獲得文件中的一行內容, 當?shù)轿募矔r,將返回 nil,但不關閉文件。

io.lines ([filename])

打開指定的文件 filename 為讀模式并返回一個迭代函數(shù), 每次調用將獲得文件中的一行內容, 當?shù)轿募矔r,將返回 nil,并自動關閉文件。若不帶參數(shù)時 io.lines() 等價于 io.input():lines() 讀取默認輸入設備的內容,結束時不關閉文件。

io.output ([file])

類似于 io.input,但操作在默認輸出文件上。

file:read (...)

按指定的格式讀取一個文件。按每個格式將返回一個字符串或數(shù)字, 如果不能正確讀取將返回 nil,若沒有指定格式將指默認按行方式進行讀取。格式:

格式含義
"*n"讀取一個數(shù)字
"*a"從當前位置讀取整個文件。若當前位置為文件尾,則返回空字符串
"*l"讀取下一行的內容。若為文件尾,則返回nil。(默認)
number讀取指定字節(jié)數(shù)的字符。若為文件尾,則返回nil。如果number為0,則返回空字符串,若為文件尾,則返回nil

io.read (...)

相當于 io.input():read

io.type (obj)

檢測 obj 是否一個可用的文件句柄。如果 obj 是一個打開的文件句柄,則返回 "file" 如果 obj 是一個已關閉的文件句柄,則返回 "closed file" 如果 obj 不是一個文件句柄,則返回 nil。

file:write (...)

把每一個參數(shù)的值寫入文件。參數(shù)必須為字符串或數(shù)字,若要輸出其它值,則需通過 tostring 或 string.format 進行轉換。

io.write (...)

相當于 io.output():write。

file:seek ([whence] [, offset])

設置和獲取當前文件位置,成功則返回最終的文件位置(按字節(jié),相對于文件開頭),失敗則返回 nil 加錯誤信息。缺省時,whence 默認為 "cur",offset 默認為 0 。 參數(shù) whence:

whence含義
"set"文件開始
"cur"文件當前位置(默認)
"end"文件結束

file:setvbuf (mode [, size])

設置輸出文件的緩沖模式。模式:

模式含義
"no"沒有緩沖,即直接輸出
"full"全緩沖,即當緩沖滿后才進行輸出操作(也可調用flush馬上輸出)
"line"以行為單位,進行輸出

最后兩種模式,size 可以指定緩沖的大小(按字節(jié)),忽略 size 將自動調整為最佳的大小。


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號