cordova-plugin-file清除文件

时间:2019-03-27 11:50:37

标签: javascript typescript cordova cordova-plugins cordova-plugin-file

我正在寻找一种使用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)
    })
  }

1 个答案:

答案 0 :(得分:0)

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

您可以使用HTML5 FileWriter truncate()方法。

    file.createWriter(writer => {
      const blob = new Blob([JSON.stringify(data)], { type: 'application/json' })
      const truncated = false;
      writer.onwriteend = function() {
        if (!truncated) {
          truncated = true;
          this.truncate(this.position);
          return;
        }
      };
      writer.write(blob)
    })