json 文字列を保存するために、chrome パッケージ アプリで filewriter を使用しました。ブロブの長さで切り捨てるようにライターが設定されているサンプルに従って、ファイルをより短いデータで上書きできるようにしました。
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);
});
})
}
問題は、長いファイルを短いデータで上書きすると、切り捨てを使用しない場合、余分なデータが残り、次のロードで有効な json を読み取ることができないことです。切り捨てを使用すると、余分なスペースはすべて奇妙な 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 をチェックし、残りを削除するよりも、これを修正するためのより良い方法はありますか? 同様に、ファイルに書き込むより良い方法はありますか?