# 文件子系统

为了在各种平台上执行,屏蔽各系统文件系统区别,同时支持在不同场景下的文件存取,我们在 LuaSTGPlus 中引入了虚拟文件系统的概念。

  • 特点
    • 根路径为/
    • /作为分隔符(\会被自动转换为/
    • 大小写敏感

# 内建路径

虚拟文件系统定义有两个固定的路径:

  • /
    • storage/
    • assets/

其中/storage/用于指向用户数据存储目录,/assets/用于指向资产目录。

# 用户数据存储目录

用户数据存储目录用于屏蔽各个系统下UserData文件夹的差异。

构建时的LSTG_APP_NAME定义将会影响这一目录的实际位置。

  • 各平台用户数据实际存储路径
    • Windows:%APPDATA%\Roaming\lstgplus\default\
    • Linux: ~/.local/share/lstgplus/default/
    • MacOS: ~/Library/Application Support/lstgplus/default/

代码可以在用户数据存储目录中进行读写操作。

# 资产目录

资产目录的构成相对用户数据存储目录复杂。

资产目录由层叠文件系统构成,访问会依次经由各个文件系统进行,当上一个文件系统不存在对应文件时,会继续调用下一个文件系统进行操作,直到遍历完成所有层叠的文件系统。

层叠文件系统

层叠文件系统在当前实现中由 Zip 文件系统构成,对应LoadPack方法加载的若干 Zip 文件构成的虚拟文件系统。越先加载的 Zip 数据包会越晚参与层叠文件系统的访问,换言之,当加载文件时,会优先搜索最近加载的 Zip 数据包。

除此以外,层叠文件系统最后尾会加入一个本地文件系统,注意到LoadPack方法本质也是在虚拟文件系统上进行的访问,因此在没有加载任何 Zip 数据包时,LoadPack会从本地文件系统中打开 Zip 数据包并进行数据加载。与此同时,在开发模式下,通过这一机制可以规避打包 Zip 的麻烦,直接在本地文件系统中进行开发。

需要注意,在开发模式中,该本地文件系统会映射到当前程序的工作路径;而在发布模式中,则始终映射到程序的执行目录下。