Cordova-plugin-file чистая перезапись файла

Я ищу чистый и безопасный способ полностью перезаписать существующие файлы при использовании плагина Cordova-plugin-file. Что я обнаружил, так это то, что даже при использовании параметра 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)
    })
  }

вы нашли здесь ответ? у меня такая же проблема

Ameur Baccoucha 27.02.2020 11:56
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
426
1

Ответы 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)
    })

Другие вопросы по теме