Lua io.open()

作者: AlbertS | 来源:发表于2016-07-19 14:28 被阅读2651次

    前言#

    上一章我们在讲解函数os.tmpname()的时候涉及到了几个IO库中函数,可能有些朋友会看的迷糊,那么接下来我会开始Lua IO 库的讲解,相信在熟悉这些函数以后,一定会对我们的工作有所帮助。

    Lua的IO库对于文件操作提供了两种不同的方式:第一种使用隐式文件描述符,通过io表中的各种方法来实现,使用这种方式的前提是操作之前先设置默认的操作文件,包括输入文件和输出文件;第二种方法就是使用显示文件描述符,这种方式需要使用io.open()方法返回的文件来调用方法。

    Lua的io表中提供了3种预定义的文件描述符io.stdin,io.stdout,io.stderr,这三种文件描述符永远不会被关闭。

    在没有特殊说明的情况系,所有的IO函数在失败的情况下返回nil(外加错误信息作为函数的第二个返回值和一个依赖于系统的错误代码作为第三个函数返回值),当然也有一些函数在成功的情况下返回nil,在非POSIX系统下,当发生错误时,错误信息和徐哦呜代码的产生也许不是线程安全的,因为他们依赖于C的全局变量errno

    内容#


    io.open()##

    • 原型:io.open (filename [, mode])

    • 解释:这个函数会以参数mode所描述的方式代开文件filename并返回一个文件描述符,如果出错将会返回nil并且附带一个错误信息。不同的mode含义解释如下:

      • "r":以只读方式打开文件,该文件必须存在,否则返回nil。(默认的打开方式)
      • "w":以只写方式打开文件,若文件存在则清空文件内容,若文件不存在则建立该文件,从头开始写入。
      • "a":以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
      • "r+":以读写方式打开文件,该文件必须存在,读取时从文件头开始读,写入时从文件头开始写,保留原文件中没有被覆盖的内容;
      • "w+":以读写方式打开文件,若文件存在则清空文件内容。若文件不存在则建立该文件,从头开始写入,读取文件时从头读取。
      • "a+":以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。

    Usage##

    • 首先我们新建一个文件命名为opentest.lua,然后编写代码如下:
    -- 打开存在的文件
    local file, msg = io.open("iotest.txt",'r')
    if file == nil then
        print(msg)
    else
        print("open exist file success :")
        print(file)
    end
    
    -- 打开不存在的文件
    local ret, errormsg = io.open("iotest2.txt", "r")
    print("\nopen don't exist file ret :")
    print(ret)
    if ret == nil then
        print(errormsg)
    end
    
    • 运行结果:
    io_open.png

    总结#

    • 代码中我们使用了mode="r"的方式打开文件是由于这种模式要求文件必须存在,如果使用其他模式可能会创建新的文件,而不会返回失败。
    • 我们可以使用mode="r"的特性来自己实现一个检测文件是否存在的函数。
    • 注意取得函数错误信息的方法,便于查找错误原因。

    相关文章

      网友评论

        本文标题:Lua io.open()

        本文链接:https://www.haomeiwen.com/subject/lnvmjttx.html