我在chrome打包的应用程序中使用了一个文件编写器来保存json字符串。我遵循了一些示例,其中写入程序被设置为截断blob的长度,这样文件就可以用更短的数据覆盖。
this.writeLocalFile = function(){
chrome.fileSystem.getWritableEntry(self.localFile, function(writableEntry){
console.log(writableEntry);
writableEntry.createWriter(function(writer) {
writer.onerror = function(){
console.log("error");
}
writer.onwriteend = function(){
console.log("Write ended");
}
self.getData();
blob = new Blob([self.data], {type: 'text/plain'});
writer.truncate(blob.size);
//writer.seek(0);
writer.write(blob);
}, function(error){
console.log(error);
});
})
}
问题是,当我用较短的数据覆盖较长的文件时,如果我不使用truncate,多余的数据就会留下,并且我在下一次加载时无法读取有效的json,如果我使用truncated,那么当我在高级中查看时,所有额外的空间都是奇怪的null字符
因此,读取的字符串仍然是旧的较长文件的长度,但当我将其登录到控制台时,该字符串是正确的,我可以复制并粘贴输出,并将其设置为另一个较短长度的变量。但是直接读取的对象仍然是较长的长度,我不知道如何从结束中修剪空字符
例如,如果文件是1200个字符,我删除了一些数据并重新保存,使json字符串是800个字符,那么文件中最后的400个字符现在为null。当我在下一次加载时重读数据时,字符串仍然是1200个字符,最后400个字符是"
weirdstring[900]//""
weirdstring[900] == "" // false
weirdstring[900] == null // false
weirdstring[900].length // 1
!weirdstring[900] // false
weirdstring.charCodeAt(900) // 0
有比扫描字符串、检查charCodeAt==0并删除其余部分更好的方法来解决这个问题吗?比如,写文件的更好方法?
我发现这个问题是因为我也有这个问题。在进行研究时,我认为我们都使用了truncate。
我认为这个stackoverflow解释了如何正确使用truncate:用HTML5FileWriter 覆盖文件