📜  Lua-文件I / O

📅  最后修改于: 2020-10-16 05:15:51             🧑  作者: Mango


I / O库用于在Lua中读取和处理文件。 Lua中有两种文件操作,即隐式文件描述符和显式文件描述符。

对于以下示例,我们将使用示例文件test.lua,如下所示。

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

一个简单的文件打开操作使用以下语句。

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

下表列出了各种文件模式。

Sr.No. Mode & Description
1

“r”

Read-only mode and is the default mode where an existing file is opened.

2

“w”

Write enabled mode that overwrites the existing file or creates a new file.

3

“a”

Append mode that opens an existing file or creates a new file for appending.

4

“r+”

Read and write mode for an existing file.

5

“w+”

All existing data is removed if file exists or new file is created with read write permissions.

6

“a+”

Append mode with read mode enabled that opens an existing file or creates a new file.

隐式文件描述符

隐式文件描述符使用标准输入/输出模式或使用单个输入和单个输出文件。下面显示了使用隐式文件描述符的示例。

-- 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文件中语句的第一行。同样,“-test.lua文件的末尾”行将附加到test.lua代码的最后一行。

在上面的示例中,您可以看到使用io。“ x”方法的隐式描述符如何与文件系统一起使用。上面的示例使用不带可选参数的io.read()。可选参数可以是以下任意一个。

Sr.No. Mode & Description
1

“*n”

Reads from the current file position and returns a number if exists at the file position or returns nil.

2

“*a”

Returns all the contents of file from the current file position.

3

“*l”

Reads the line from the current file position, and moves file position to next line.

4

number

Reads number of bytes specified in the function.

其他常见的I / O方法包括

  • io.tmpfile() -返回用于读取和写入的临时文件,一旦程序退出,该文件将被删除。

  • io.type(file) -根据输入文件返回file, close file还是nil。

  • io.flush() -清除默认的输出缓冲区。

  • io.lines(可选文件名) -提供一个通用的for循环迭代器,该循环遍历文件并最终关闭文件(如果提供了文件名或使用了默认文件但未在循环末尾关闭) 。

显式文件描述符

我们经常使用显式文件描述符,该描述符允许我们一次处理多个文件。这些功能与隐式文件描述符非常相似。在这里,我们使用file:function_name而不是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

外部描述符的所有文件打开模式和参数读取方式与隐式文件描述符相同。

其他常见的文件方法包括

  • file:seek(可选的whence,可选的偏移量) -whence参数为“ set”,“ cur”或“ end”。从文件的开头开始,使用更新后的文件位置设置新文件指针。该函数的偏移量从零开始。如果第一个参数为“ set”,则从文件开头开始测量偏移量;从文件的当前位置开始,如果它是“ cur”;或从文件末尾开始(如果是“ end”)。默认参数值为“ cur”和0,因此可以通过不带参数调用此函数来获取当前文件位置。

  • file:flush() -清除默认的输出缓冲区。

  • io.lines(可选文件名) -提供一个通用的for循环迭代器,该循环遍历文件并最终关闭文件(如果提供了文件名或使用了默认文件且未在循环末尾关闭) 。

下面显示了使用seek方法的示例。它使光标从文件结尾之前的25个位置偏移。读取函数从搜索位置打印文件的其余部分。

-- 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

您可以试玩所有不同的模式和参数,以了解Lua文件操作的全部功能。