как добавить файл с помощью файла-плагина Cordova

Я пытаюсь добавить текст в файл.

Я следовал руководству по Html5rocks, как это было предложено на странице плагинов на github.

Я успешно создал файл и написал в него. Но когда я пытаюсь добавить текст, я получаю событие успешной записи, но текст не добавляется. Я могу только менять символы, но в конце не добавлено ни одного персонажа. Это не проблема асинхронности, я также пытаюсь провести живое тестирование с помощью консоли 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;

}

Я использую его с хромированной консолью с

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");

person Mat'arangéÇa    schedule 11.08.2015    source источник
comment
Разве вы не выделяете здесь 0 пробелов: window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);   -  person Piwwoli    schedule 11.08.2015
comment
Кстати, вы используете кордову или телефонную связь, если быть точным?   -  person Piwwoli    schedule 11.08.2015
comment
Piwwoli, я пытался, но получил тот же результат. Может быть, мне стоит запустить это, прежде чем пытаться добавить? я использую кордову 5.0.0, как показано $ cordova -v   -  person Mat'arangéÇa    schedule 11.08.2015
comment
Разве вся кордова не определена, если только вы не используете ее на мобильном устройстве?   -  person Piwwoli    schedule 11.08.2015
comment
да, я запускаю его на устройстве Android и отлаживаю его с помощью удаленного хрома... с хромом: //проверить   -  person Mat'arangéÇa    schedule 11.08.2015
comment
Кто-нибудь может хотя бы подтвердить этот баг?   -  person Mat'arangéÇa    schedule 11.08.2015


Ответы (1)


Похоже, что мой файл действительно получил новые данные. Мне пришлось отключить, а затем снова подключить USB-кабель, чтобы увидеть новые данные, добавленные в мой файл.

Возможно проблема в винде. Я посмотрю, есть ли у меня такая же проблема в Linux.

person Mat'arangéÇa    schedule 18.08.2015
comment
Правильно!! Ты действительно классный мужчина! Спасибо. В Linux это работает, как и ожидалось, но в Windows 7 вам нужно сделать это в качестве обходного пути, потому что у вас нет другого выбора, кроме этого! - person Islam Attrash; 07.12.2016