-
Notifications
You must be signed in to change notification settings - Fork 395
FileSystem
actboy168 edited this page Aug 3, 2024
·
7 revisions
访问 VFS 可以使用 filesystem 模块:
local fs = require "filesystem"
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 。
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) ,但更高效。