LuaFileSystem,简称lfs,是一个用于Lua进行文件访问的库,支持Lua5.1和Lua5.2,且跨平台。

安装:luarocks install luafilesystem

所有的路径中不识别类似于”~“的替代符

函数及属性说明:

lfs.attributes(filepath[,aname])

  • 返回一个包含filepath各种属性的表(如发生错误则返回nil和错误消息)
  • 第二个为可选参数,表示只返回指定属性的值
  • 这种用法相当于lfs.attributes(filepath[,aname]).aname,只不过不返回一个table并且仅仅从os取得一个属性值

属性table包含以下属性值:

其中除mode是一个字符串外,其它的全部是数字;时间相关的属性值与os.time()得到的数字一致

• dev:Unix系统中,表示inodes所代表的设备。Windows系统上,表示文件所在的磁盘驱动器号
• ino:Unix上表示inodes数。windows上无意义
• mode:关联的保护模式的字符串(值可以是file、directory、link、socket、named pip、char device、block device或其他)。
• nlink:文件上的硬链接数
• uid:unix系统中的user-id,windows上为0
• gid:unix系统中的group-id,windows上为0
• rdev:unix上,表示设备类型。windows上含义与dev相同
• access:最后一次访问时间
• modification:最后一次修改时间
• change:最后一次文件状态修改时间
• size:以bytes计算的文件大小
• blocks:unix系统上分配给文件的block数
• blksize:unix中文件系统I/O块大小

lfs.chdir(path)

  • 切换工作路径到path
  • 成功时返回true,错误时返回nil或者加上错误信息

lfs.currentdir()

  • 返回当前工作路径或者nil加上错误信息

lfs.dir(path)

  • 返回内容相当于执行指令”ls -a“,没有内容时返回nil
  • 如path不是目录,报错
  • 所获取到的内容包括”.“和”..“两个特殊目录

lfs.lock(filehandle,mode[,start[,length]])

  • 锁定文件或文件的一部分。这个函数作用于打开的文件;
  • 第一个参数为文件句柄。
  • mode可以是r(用于读/共享锁)或w(用于写/独占锁)。
  • 可选参数start和length可用于指定起始点及其长度;两者都是数字。
  • 如果操作成功,返回true;如果发生错误,它将返回nil加上一个错误字符串。

lfs.mkdir(dirname)

  • 创建目录。参数是新目录的名称。
  • 操作成功,返回true;
  • 发生错误,返回nil加上一个错误字符串。

lfs.rmdir(dirname)

  • 删除目录。参数是目录的名称。
  • 如果操作成功,返回true;
  • 如果发生错误,它将返回nil加上一个错误字符串。

lfs.touch(filepath[, atime[, mtime]])

  • 创建文件并设置文件的访问和修改时间。这个函数绑定到utime函数。
  • 第一个参数是文件名,
  • 第二个参数(atime)是访问时间,
  • 第三个参数(mtime)是修改时间。
  • 这两个时间都是以秒为单位(这两个时间使用Lua标准函数os.date生成)。
  • 如果省略修改时间,则使用访问时间作为修改时间;
  • 如果两个时间都省略,则使用当前时间。
  • 如果操作成功,返回true;如果发生错误,它将返回nil加上一个错误字符串。

lfs.unlock(filehandle[,start[,length]])

  • 解锁文件或文件的一部分。这个函数作用于打开的文件;
  • 第一个参数为文件句柄。
  • 可选参数start和length可用于指定起始点及其长度;两者都是数字。
  • 如果操作成功,返回true;如果发生错误,它将返回nil加上一个错误字符串。

使用实例:

require"lfs"
  function attrdir (path)
      for file in lfs.dir(path) do
          if file ~= "." and file ~= ".." then
              local f = path..'/'..file
              print ("\t "..f)
              local attr = lfs.attributes (f)
              assert (type(attr) == "table")
              if attr.mode == "directory" then
                  attrdir (f)
              else
                  for name, value in pairs(attr) do
                      print (name, value)
                  end
              end
          end
      end
  end

  attrdir (".")