1

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 をチェックし、残りを削除するよりも、これを修正するためのより良い方法はありますか? 同様に、ファイルに書き込むより良い方法はありますか?

4

1 に答える 1