所以我遇到了一个问题,我通过 HTML5 File-system api 将内容写入文件。当新内容比以前的内容短时会出现此问题,旧内容按预期覆盖,但旧内容的尾部仍保留在文件末尾。我正在编写的数据是给定 Web 应用程序的元数据,并且往往会定期更改,但不是很频繁,通常会增加大小,但有时元数据的大小会更小。
例如,文件的原始内容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
在我寻找解决方案时出现在下面(这篇文章)。正如上一篇文章中所指出的,截断只能在打开文件后立即调用 - 截断是更好的方法吗?我在做什么是更好的做法吗?有没有我不知道的更快更简单的方法?
我想在每次写入文件时重新开始 - 如果这是合理的和/或良好的做法。