10

私は HTML5 ファイル API を試していますが、よくわからないメソッドを使用する必要があります (どこにもほとんど文書化されていないため)。

FileWriter の truncate() メソッドについて話しているのですが、それが必要なことを実行してくれることはわかっています。基本的に、一部のファイル データにテキストを追加したり、seek() を使用して特定の部分を上書きしたりするのではなく、すべてのデータを別のもの (たとえば、"somedata" から "") で上書きしたいと考えています。

これは、truncate() が追加された、HTML5Rocks からの FileWriter セットアップのスニペットです。

function onInitFs(fs) {

  fs.root.getFile('log.txt', {create: false}, function(fileEntry) {

    // Create a FileWriter object for our FileEntry (log.txt).
    fileEntry.createWriter(function(fileWriter) {

      fileWriter.seek(fileWriter.length); // Start write position at EOF.
      fileWriter.truncate(1);

      // Create a new Blob and write it to log.txt.
      var bb = new BlobBuilder(); // Note: window.WebKitBlobBuilder in Chrome 12.
      bb.append('Hello World');
      fileWriter.write(bb.getBlob('text/plain'));

    }, errorHandler);

  }, errorHandler);

}

window.requestFileSystem(window.PERSISTENT, 1024*1024, onInitFs, errorHandler);

writer.truncate() を呼び出すと、writer.write() を呼び出すとファイル例外エラーがスローされます。これは、readyState が WRITING に設定されているためだと思います。残念ながら、それを回避する方法がわかりません。

これに関するHTML5Rocks セクションを調べてみましたが、truncate() メソッドについては何も教えてくれませんでした (ただし、Webkit JS コンソールが教えてくれることから存在することはわかっています)。

簡単に言えば、エラーを発生させずに truncate() メソッドを正しく使用するにはどうすればよいですか?

4

2 に答える 2

11

このようなものはもう少し要点かもしれません:

truncateファイルの長さを指定された長さに変更します

fileEntry.createWriter(function(fileWriter) {
    var truncated = false;
    fileWriter.onwriteend = function(e) {
        if (!truncated) {
            truncated = true;
            this.truncate(this.position);
            return;
        }
        console.log('Write completed.');
    };
    fileWriter.onerror = function(e) {
        console.log('Write failed: ' + e.toString());
    };
    var blob = new Blob(['helo'], {type: 'plain/text'});
    fileWriter.write(blob);
}, errorHandler);
于 2013-01-15T22:38:34.083 に答える
7

もっと非同期にする必要があります。:)

fileEntry.createWriter(function(fileWriter) {

  fileWriter.onwriteend = function(trunc) {
    fileWriter.onwriteend = null; // Avoid an infinite loop.
    // Create a new Blob and write it to log.txt.
    var bb = new BlobBuilder(); // Note: window.WebKitBlobBuilder in Chrome 12.
    bb.append('Hello World');
    fileWriter.write(bb.getBlob('text/plain'));
  }

  fileWriter.seek(fileWriter.length); // Start write position at EOF.
  fileWriter.truncate(1);

}, errorHandler);
于 2011-07-29T02:26:05.680 に答える