【问题标题】:cordova-plugin-file clean overwrite of file科尔多瓦插件文件干净覆盖文件
【发布时间】:2019-08-17 23:29:43
【问题描述】:

我正在寻找一种干净且安全的方法来在使用 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)
    })
  }

【问题讨论】:

  • 你在这里找到答案了吗?我有同样的问题

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


【解决方案1】:

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

您可以使用 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)
    })

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-25
    • 1970-01-01
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    • 2022-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多