Cordova-плагин-файл чистой перезаписи файла - PullRequest
0 голосов
/ 27 марта 2019

Я ищу чистый и безопасный способ полностью перезаписать существующие файлы при использовании плагина 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)
    })
  }
...