# 文件系统

文件系统是快手小游戏提供的一套以用户维度和小游戏维度隔离的一套文件管理的接口,通过 ks.getFileSystemManager() 可以获取到全局唯一的文件系统管理器,所有文件系统的管理操作通过 FileSystemManager 来调用。

var fs = ks.getFileSystemManager()

文件主要分为两大类:

  • 代码包文件:项目目录中添加的文件。
  • 本地文件:通过网络下载的,或者因为调用接口而在本地产生的文件。包括:本地临时文件,本地用户文件。

# 代码包文件

代码包文件最好放置仅首次加载时需要的文件,不应太大,一些较大的文件推荐在小游戏启动之后再调用接口下载。

  • 访问代码包文件方式:代码包文件的访问方式是从项目根目录开始写文件路径,不支持相对路径的写法。如:/a/b/ca/b/c 都是合法的,./a/b/c../a/b/c 则不合法。
  • 关于代码包文件的修改:代码包内的文件无法在运行后动态修改或删除,修改代码包文件需要重新发布版本。

# 本地文件

本地文件指的是小游戏被用户添加到手机后,会以用户维度隔离而获得一块独立的文件存储区域。同一台设备上,A 用户无法读取到 B 用户的数据;不同小游戏之间也无法互相访问数据。

  • 本地文件路径格式:
   {{协议名}}://文件路径
  • 本地临时文件通过调用特定接口产生,不能直接写入内容。不限制存储大小。
  • 本地用户文件最多可存储 200MB。

# 本地临时文件

本地临时文件只能通过调用特定接口产生,不能直接写入内容。本地临时文件产生后,仅在当前生命周期内有效,重启游戏后即不可用。因此,不可把本地临时文件路径存储起来下次使用。如果需要下次在使用,可通过 FileSystemManager.saveFile()FileSystemManager.copyFile() 接口把本地临时文件转换成本地用户文件。

示例

ks.chooseImage({
  success: function (res) {
    var tempFilePaths = res.tempFilePaths // tempFilePaths 的每一项是一个本地临时文件路径
  }
})

# 本地用户文件

  • 本地用户文件可自由读写。

示例

// 在本地用户文件目录下创建一个文件 hello.txt,写入内容 "hello, world"
const fs = ks.getFileSystemManager()
fs.writeFileSync(`${ks.env.USER_DATA_PATH}/hello.txt`, 'hello, world', 'utf8')

# 清理策略

  • 本地临时文件只保证在小游戏当前生命周期内有效,一旦小游戏被关闭就可能被清理,即下次冷启动不保证可用。
  • 本地用户文件的清理时机跟代码包一样,只有在代码包被清理的时会被清理。

# 相关API

接口 功能说明
ks.getFileSystemManager 获取全局唯一的文件管理器
Stats 描述文件状态的对象
Stats.isDirectory 判断当前文件是否是一个目录
Stats.isFile 判断当前文件是否是一个普通文件
FileSystemManager 文件管理器
FileSystemManager.access 判断文件/目录是否存在
FileSystemManager.accessSync FileSystemManager.access 的同步版本
FileSystemManager.appendFile 在文件结尾追加内容
FileSystemManager.appendFileSync FileSystemManager.appendFile的同步版本
FileSystemManager.copyFile 复制文件
FileSystemManager.copyFileSync FileSystemManager.copyFile 的同步版本
FileSystemManager.getFileInfo 获取该小游戏下的本地文件信息
FileSystemManager.mkdir 创建目录
FileSystemManager.mkdirSync FileSystemManager.mkdir的同步版本
FileSystemManager.readdir 读取目录内文件列表
FileSystemManager.readdirSync FileSystemManager.readdir的同步版本
FileSystemManager.readFile 读取本地文件内容
FileSystemManager.readFileSync FileSystemManager.readFile的同步版本
FileSystemManager.rename 重命名文件。可以把文件从 oldPath 移动到 newPath
FileSystemManager.renameSync FileSystemManager.rename的同步版本
FileSystemManager.rmdir 删除目录
FileSystemManager.rmdirSync FileSystemManager.rmdir的同步版本
FileSystemManager.saveFile 保存临时文件到本地。此接口会移动临时文件,因此调用成功后,tempFilePath 将不可用。
FileSystemManager.saveFileSync FileSystemManager.saveFile 的同步版本
FileSystemManager.stat 获取文件 Stats 对象
FileSystemManager.statSync FileSystemManager.stat的同步版本
FileSystemManager.unlink 删除文件
FileSystemManager.unlinkSync FileSystemManager.unlink的同步版本
FileSystemManager.unzip 解压文件
FileSystemManager.writeFile 写文件
FileSystemManager.writeFileSync FileSystemManager.writeFile的同步版本