Лучший способ перезаписать содержимое файла HTML5 файловой системы API
Таким образом, я столкнулся с проблемой, когда я записывал содержимое в файл через API файловой системы HTML5. Проблема возникает, когда новый контент короче предыдущего, старый контент перезаписывается, как и ожидалось, но хвост старого контента остается в конце файла. Данные, которые я пишу, являются метаданными для данного веб-приложения и имеют тенденцию периодически меняться, но не очень часто, обычно увеличиваясь в размере, но иногда метаданные имеют меньший размер.
Пример оригинального содержимого файла 0000000000
, новый контент 11123
и после записи в файл содержимое становится 1112300000
Чтобы обойти это, я удалял файл и передавал обратный вызов, чтобы записывать новую информацию при каждом вызове. (cnDAO.filesystem
это объект файловой системы, полученный при запросе постоянной памяти и правильно инициализированный)
function writeToFile(fPath,data,callback){
rmFile(fPath,function(){
cnDAO.fileSystem.root.getFile(fPath, {
create: true
}, function(fileEntry) {
fileEntry.createWriter(function(writer) {
writer.onwriteend = function(e) {
callback();
};
writer.onerror = function(e3) { };
var blob = new Blob([data]);
writer.write(blob);
}, errorHandler);
}, errorHandler);
});
}
function rmFile(fPath,callback){
cnDAO.fileSystem.root.getFile(fPath, {
create: true
}, function(fileEntry) {
fileEntry.remove(callback);
}, errorHandler);
}
Итак, мне было интересно, есть ли лучший способ сделать то, что я делаю. truncate
появился в следующем, пока я искал решение ( этот пост). Как указывалось в предыдущем посте, усечение можно вызывать только сразу после открытия файла. Является ли усечение лучшим подходом? Чем я занимаюсь лучше? Есть ли более быстрый и простой способ, о котором я не знаю?
Я бы хотел начать все заново с каждой записи в файл - если это правдоподобно и / или является хорошей практикой.