Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用HTML5 FileWriter truncate()方法?_Javascript_Html_Truncate_Filewriter - Fatal编程技术网

Javascript 使用HTML5 FileWriter truncate()方法?

Javascript 使用HTML5 FileWriter truncate()方法?,javascript,html,truncate,filewriter,Javascript,Html,Truncate,Filewriter,我正在试验HTML5文件API,我需要使用一种我不太了解的方法(只是因为它几乎没有文档记录) 我说的是FileWriter truncate()方法,我知道它完成了我需要做的事情。基本上,我不想将文本附加到某些文件数据或使用seek()覆盖某些部分,而是想用其他内容覆盖所有数据(例如,从“somedata”到“” 下面是HTML5Rocks中FileWriter设置的一个片段,其中添加了truncate() function onInitFs(fs) { fs.root.getFile('

我正在试验HTML5文件API,我需要使用一种我不太了解的方法(只是因为它几乎没有文档记录)

我说的是FileWriter truncate()方法,我知道它完成了我需要做的事情。基本上,我不想将文本附加到某些文件数据或使用seek()覆盖某些部分,而是想用其他内容覆盖所有数据(例如,从“somedata”到“”

下面是HTML5Rocks中FileWriter设置的一个片段,其中添加了truncate()

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设置为write。不幸的是,我不知道如何避免这种情况

我已经尝试过在这个问题上查看,但它没有告诉我任何关于truncate()方法的信息(尽管我从Webkit JS控制台告诉我的信息中知道它存在)


长话短说,我如何才能正确使用truncate()方法而不出错?

您需要更加异步:)


类似这样的内容可能更切题:

truncate将文件的长度更改为指定的长度


喜欢。为什么要截断(1)?为什么不截断(0)以得到一个大小为零的文件呢?我可能错了,但我相信这会导致无限递归,因为您经常触发onwriteend。因此,您可能需要从其中取消onwriteend。很好的捕获。在我编写的代码中,我始终希望替换onwriteend以建立后续代码。我正在重写原始代码以使用异步截断,但我没有考虑替换/取消onwriteend函数。
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);
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);