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



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я думаю, я нашел способ исправить это.
Вы можете использовать метод 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)
})
вы нашли здесь ответ? у меня такая же проблема