Read this manual in English

处理文件

存取文件有很多种方式. 文件的路径和文件类型决定了采取何种方式.

文件/文件夹存取函数

Defold 提供如下函数用以存取文件/文件夹:

  • 标准输入输出库 io.* functions. 用于文件/文件夹存取, 底层高效细致灵活.
  • 操作系统库 os.rename()os.remove() 用于文件改名和删除.
  • 游戏引擎系统库 sys.save()sys.load() 用于存取 Lua 表. 其他 sys.* 下的函数用于不同操作系统文件路径的解析.

文件/文件夹位置

有三个文件/文件夹位置可供游戏应用存取使用:

  • 游戏应用所在位置下的文件
  • 游戏应用打包进去的文件
  • 操作系统所管理的文件

游戏指定位置的文件处理

像最高分数, 用户设置和游戏状态等信息建议如此处理. 用 sys.get_save_file() 函数得到操作系统指定的文件绝对路径. 然后用 sys.*, io.*os.* 函数处理文件/文件夹 (见上文).

Check the example showing how to use sys.save() and sys.load().

游戏应用打包进去的文件处理

游戏打包有两种方法:

  1. game.project 配置文件中的 Custom Resources 设置自定义资源. 然后就可以使用 sys.load_resource() 函数进行加载. 其实这不是在加载磁盘上的文件. 打包进游戏的资源文件作为游戏的一部分保存为二进制数据, 只能使用 sys.load_resource() 载入.

  2. game.project 配置文件中的 Bundle Resources 设置额外打包文件. 然后就可以使用 sys.get_application_path() 取得游戏所在位置. 进而取得文件的绝对路径. 然后用 sys.*, io.*os.* 函数处理文件/文件夹 (见上文).

操作系统文件处理

基于安全考虑操作系统所管理的文件存取被严格限制. 可以使用 extension-directiories 原生扩展来存取某些地方的绝对路径 (例如 documents, resource, temp). 然后用 sys.*, io.*os.* 函数处理文件/文件夹 (见上文).

::: 注意 基于安全考虑浏览器 (及浏览器里运行的 JavaScript 插件) 不允许访问本地文件. 虽然 HTML5 游戏也能运行, 但是只能用浏览器提供的 IndexedDB API 在 “虚拟文件系统” 中存取数据. 也就是说不允许使用 io.*os.* 下的函数. 但是可以用 http.request() 请求在线资源文件. :::

相关原生扩展

资源中心 里有些原生扩展能简化文件存取的工作. 例如:

  • Lua File System (LFS) - 提供操作文件夹, 文件权限之类的功能.
  • DefSave - 一个用于保存/加载游戏设置和玩家数据档的模块.

Did you spot an error or do you have a suggestion? Please let us know on GitHub!

GITHUB