【问题标题】:how to append to file with cordova-plugin-file如何使用cordova-plugin-file附加到文件
【发布时间】:2015-11-03 02:51:12
【问题描述】:

我正在尝试将文本附加到文件中。

按照插件的 github 页面的建议,我已按照 Html5rocks 的教程进行操作。

我已经成功地创建了一个文件并写入了它。但是当我尝试附加文本时,我得到了一个写入成功事件,但没有添加任何文本。我只能更改字符,但最后没有添加字符。这不是异步问题,我也在尝试使用 chrome 的 js 控制台进行实时测试。我也在尝试写到最后之前使用fileWriter.seek(fileWriter.length)。 (但 seek(0) 写一个开头)

这是我写的模块:

'use strict';

function File_mgmt(name) {
    var name = name;

    var myfile = '';

    var next_write = '';

    var that = this;

    var errorHandler = function (e) {

        var msg = '';

        switch (e.code) {
            case FileError.QUOTA_EXCEEDED_ERR:
              msg = 'QUOTA_EXCEEDED_ERR';
              break;
            case FileError.NOT_FOUND_ERR:
              msg = 'NOT_FOUND_ERR';
              break;
            case FileError.SECURITY_ERR:
              msg = 'SECURITY_ERR';
              break;
            case FileError.INVALID_MODIFICATION_ERR:
              msg = 'INVALID_MODIFICATION_ERR';
              break;
            case FileError.INVALID_STATE_ERR:
              msg = 'INVALID_STATE_ERR';
              break;
            default:
              msg = 'Unknown Error';
              break;
        };

        console.log('Error: ' + msg);
    };


    var init = function() {
        console.log("init");
        request(gotFS);
    };

    var gotFS = function() {
        console.log("gotfs");
        window.resolveLocalFileSystemURL(cordova.file.externalDataDirectory, function(dir) { 
            dir.getFile(name, {create:true}, function(file) {
                myfile = file;
            }, errorHandler);
        });
    };

    this.write = function (data) {
        myfile.createWriter(function(fileWriter) {

            fileWriter.onwriteend = function(e) {
              console.log('Write completed.');
            };

            fileWriter.onerror = function(e) {
              console.log('Write failed: ' + e.toString());
            };

            // Create a new Blob and write it to log.txt.
            fileWriter.seek(fileWriter.length);

            fileWriter.write(data);

        }, errorHandler);


    };

    this.reopen = function() {
        window.resolveLocalFileSystemURL(cordova.file.externalDataDirectory, function(dir) { 

            dir.getFile(name, {create:false}, function(file) {
                myfile = file;
            }, errorHandler);
        });

    };

    this.getfile = function() {
        return myfile;
    };

    this.writeTextBlob = function(data) {
        this.write(new Blob([data], {type: 'text/plain'}));
    };

    var request = function(success){
        var fail = function() {console.log("failed to initialise system")};
        window.requestFileSystem(LocalFileSystem.PERSISTENT, 1024*1024, success, fail);
    };  

    var writer = function() {

        myfile.createWriter(function(fileWriter) {

            fileWriter.onwriteend = function(e) {
              console.log('Write completed.');
            };

            fileWriter.onerror = function(e) {
              console.log('Write failed: ' + e.toString());
            };

            // Create a new Blob and write it to log.txt.
            fileWriter.seek(fileWriter.length);

            fileWriter.write(next_write);

        }, errorHandler);
    };

    this.testWrite = function(data) {
        next_write = data;
        request(writer);

    };


    init();


    return this;

}

我将它与 chrome 控制台一起使用

var f = new File_mgmt("test");
f.writeTextBlob("test1");
f.writeTextBlob("test2");

编辑

我尝试通过 window.requestFileSystem() 来追加,但它仍然不起作用,我还更新了我的代码。

现在我在做

var f = new File_mgmt("test");
f.testWrite("test1");
f.testWrite("test2");

【问题讨论】:

  • 这里不是分配0空间吗:window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
  • 顺便问一下,你使用的是cordova还是phonegap?
  • Piwwoli,我试过了,但我得到了相同的结果..我可以在尝试追加之前运行这个吗?我正在使用cordova 5.0.0,如$ cordova -v所示
  • 整个cordova不是未定义的吗,除非你在移动设备上运行它?
  • 是的,我在 android 设备上运行它并使用远程 chrome 进行调试 ..with chrome://inspect

标签: javascript cordova append filewriter cordova-plugin-file


【解决方案1】:

它看起来比我的文件实际上得到了新数据。我必须拔掉然后重新插入 USB 电缆才能看到新数据附加到我的文件中。

可能是 Windows 的问题。我会看看我在linux上是否遇到同样的问题。

【讨论】:

  • 没错!!你真是个了不起的人!谢谢。在 linux 中按预期工作,但在 Windows 7 中,您需要将其作为一种解决方法,因为您别无选择!
猜你喜欢
  • 1970-01-01
  • 2015-09-09
  • 2020-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多