Skip to content

FileSystem

actboy168 edited this page Aug 3, 2024 · 7 revisions

访问 VFS 可以使用 filesystem 模块:

local fs = require "filesystem"

path 对象

path:string()
  -- 返回 string
  -- 这是 path 对象的字符串形式
  -- 例:assert(fs.path("a/abc.ext"):string() == "a/abc.ext")

path:filename()
  -- 返回 path
  -- 不含路径的文件名
  -- 例: assert(fs.path("a/abc.ext"):filename():string() == "abc.ext")

path:parent_path()
  -- 返回 path
  -- 所属路径(去掉文件名)
  -- 例: assert(fs.path("a/abc.ext"):parent_path():string() == "a")
  -- 例2: assert(fs.path("a/b/c"):parent_path():string() == "a/b")
  -- 例3: assert(fs.path("a/b/"):parent_path():string() == "a/b")

path:stem()
  -- 返回 path
  -- 去掉后缀的文件名 (如果文件名以 . 开头,第一个 . 不视为后缀分割符)
  -- 例: assert(fs.path("a/abc.ext"):stem():string() == "abc")
  -- 例2: assert(fs.path("a/.ext"):stem():string() == ".ext")

path:is_absolute()
  -- 返回 boolean
  -- 判断是否为绝对路径

path:is_relative()
  -- 返回 boolean
  -- 判断是否为相对路径

path:remove_filename()
  -- 返回 path
  -- 去掉文件名。和 parent_path 不同在于,会保留最后的 / 。
  -- parent_path 会复制一个path对象,remove_filename则是在原对象上修改。
  -- 例:assert(fs.path("a/abc.ext"):parent_path():string() == "a/")

path:replace_filename(filename)
  -- 返回 path
  -- 替换文件名,参数可以是 path 或 string 。
  -- 例: assert(fs.path("a/b/c.lua"):replace_filename("d.lua"):string() == "a/b/d.lua")

path:replace_extension(ext)
  -- 返回 path
  -- 替换后缀名,参数可以是 path 或 string 。
  -- 例: assert(fs.path("a/b/c.ext"):replace_extension(".lua"):string() == "a/b/c.lua")

path:lexically_normal()
  -- 返回 path
  -- 去掉路径中的 .. 和 .
  -- 例:assert(fs.path("./b"):lexically_normal():string() == "b")
  -- 例2:assert(fs.path("a/b/c/../../d"):lexically_normal():string() == "a/d")

-- path 支持的操作符
-- / 用路径分割符 / 连接两个 path(它会确保不会引入多余的/, fs.path("a/") / "b" => "a/b", fs.path("a") / "b" => "a/b")
-- .. 直接连接两个 path
-- == 判断两个 path 是否相同(对path使用lexically_normal后,再判等)
-- tostring ,path 可以用 tostring() 转换,支持 print 。

文件系统 api

fs.path(pathname)
  -- 返回 path
  -- 从字符串或 path 构造 path 对象

fs.exists(path)
  -- 返回 boolean
  -- 判断文件是否存在

fs.is_directory(path)
  -- 返回 boolean
  -- 判断文件是否是一个目录

fs.pairs(path)
  -- 遍历目录
  -- 例:遍历根目录 for filepath, attr in fs.pairs "/" do
  -- attr:is_directory() 等价于 fs.is_directory(path) ,但更高效。
Clone this wiki locally