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