Лучший способ перезаписать содержимое файла 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 появился в следующем, пока я искал решение ( этот пост). Как указывалось в предыдущем посте, усечение можно вызывать только сразу после открытия файла. Является ли усечение лучшим подходом? Чем я занимаюсь лучше? Есть ли более быстрый и простой способ, о котором я не знаю?

Я бы хотел начать все заново с каждой записи в файл - если это правдоподобно и / или является хорошей практикой.

0 ответов

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