cordova-plugin-file干净覆盖文件

问题描述 投票:1回答:1

我正在寻找一种干净安全的方法,以在使用cordova-plugin-file Cordova插件时完全覆盖现有文件。我发现,即使使用exclusive: false选项,如果新文件的内容比现有文件更短,现有文件的其余部分仍会保留在新文件的末尾。

示例。我有一个包含0123456789内容的现有文件,并希望将其替换为abcd。当使用exclusive: false时,我最终得到的文件的内容为abcd456789

显然,这会在回读时引起复杂性,特别是当我希望这些文件是正确的json时。

我一直无法找到其他答案,而不仅仅是简单地说使用exclusive: false

到目前为止,我可以先手动删除文件,然后再写入文件来解决此问题,但是如果我在错误的时间关闭应用程序,这将使我有丢失全部文件数据的危险。] >

另一种选择是写入临时文件,然后删除现有的文件,然后复制临时文件,然后删除临时文件。并在读取时检查我想要的文件,如果不存在,请检查它的临时文件,然后复制并清理(如果存在)。这似乎是一个漫长的工作,应该选择一些选项。

我在这里想念东西吗?

这是我现有的解决方法,尽管它尚无法解决应用程序关闭的可能性。在我不得不掉进那个兔子洞之前,还有更好的方法吗?

  private replaceFileAtPath<T>(path: string, data: T): void {
    FileService.map.Settings.getFile(path, { create: true }, fileEntry => {
      fileEntry.remove(() => {})
      FileService.map.Settings.getFile(path, { create: true }, fe =>
        this.writeFile(fe, data)
      )
    })
  }

  private writeFile<T>(file: FileEntry, data: T, cb?: () => void): void {
    file.createWriter(writer => {
      const blob = new Blob([JSON.stringify(data)], { type: 'application/json' })

      writer.write(blob)
    })
  }

我正在寻找一种干净安全的方法,以在使用cordova-plugin-file Cordova插件时完全覆盖现有文件。我发现的是,即使使用独占:false选项,如果...

javascript typescript cordova cordova-plugins cordova-plugin-file
1个回答
0
投票

我想我找到了解决此问题的方法。

© www.soinside.com 2019 - 2024. All rights reserved.