Debugging Monaca调试器未正确处理持久性存储

Debugging Monaca调试器未正确处理持久性存储,debugging,cordova,monaca,Debugging,Cordova,Monaca,全部, 我可能在Monaca调试器中发现了一个bug 我正在使用以下代码获取持久或临时存储: window.requestFileSystem(__storageType, _size, function(_fileSystem) { // Success logger.info("initFilesystem: _fileSystem.root: " + _fileSystem.root.toURL()); _deferred.resolve(

全部,

我可能在Monaca调试器中发现了一个bug

我正在使用以下代码获取持久或临时存储:

window.requestFileSystem(__storageType, _size, 
    function(_fileSystem) { // Success
        logger.info("initFilesystem: _fileSystem.root: " + _fileSystem.root.toURL());
            _deferred.resolve(_fileSystem);
        }, function(_error) { // Failure
            _deferred.reject(_error);
        });
在Android和iOS上正确管理文件的位置。 但是,该路径在Android和持久性存储上不正确,我假设Monaca调试器如何为cordova插件提供路径是一个错误(请注意,我还没有尝试在没有调试器的情况下部署到Android并进行验证)

下面是我为Android和iOS获得的路径,其中我只在Android上获得根目录,用于持久化(注意,在所有示例中,文件都得到了正确管理,只有Android和持久化的路径不正确)

这是一个bug,还是我需要在代码中管理的特性

持久文件路径:
  • iOS:_fileSystem.root:file:///var/mobile/Containers/Data/Application/43F2E2CE-5F06-43F0-AE1C-4DD35EFF723A/Documents/
  • Android:_fileSystem.root:file:///storage/emulated/0/
临时文件路径:
  • iOS:_fileSystem.root:file:///var/mobile/Containers/Data/Application/43F2E2CE-5F06-43F0-AE1C-4DD35EFF723A/tmp/
  • Android:_fileSystem.root:file:///storage/emulated/0/Android/data/mobi.monaca.debugger/cache/
版本:
  • iOS版本:8.1.2
  • iOS Monaca调试器版本:3.1.1
  • 安卓版本:4.2.2
  • Android Monaca调试器版本:3.1.1
更新2015-02-04: 使用的文件对象(简化代码):

}

初始化:
通过上述操作,将创建FileIO对象、初始化文件系统并创建文件,其中持久性存储放在根目录中(根据最新Monaca更新对Cordova 4进行了测试和验证),而“非持久性”则放在正确的目录中。

请您提交一个包含必要代码的最小项目,以重现此问题,好吗?“谢谢你,”弗兰迪奥斯说。该示例使用代码更新。
function FileIO() {
if (false === (this instanceof FileIO)) { return new FileIO(); } // Enforce that every time a constructor function is called, this function is invoked properly using the new operator.

/** @public @method initFilesystem.
 * @desc Initialize filesystem
 * @param {boolean} Persistent = true, Temporary = false. Must be boolean. Defaults to true.
 * @param {size} Size in bytes requested. Must be number. Defaults to 0 bytes.
 * @return Promise (see examples above). */
FileIO.prototype.initFilesystem = function(_persistent, _size) {
    /** @private */ var _deferred = new jQuery.Deferred(); // Used for object Promise.
    /** @private */ var _err = { code: null };
    if (__status != STATUS_INITIALIZED) { // Only perform if not already initialized.
        if (typeof _persistent !== 'boolean') { _persistent = true; } // Value must be boolean. Default to true if not set correctly.
        if (typeof _size !== 'number') { _size = 0; } // Value must be number. Default to 0 bytes if not set correctly.
        (_persistent == true) ? __storageType = window.PERSISTENT : __storageType = window.TEMPORARY;
        __status = STATUS_INITIALIZING;
        try {
            window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
            window.storageInfo = window.storageInfo || window.webkitStorageInfo;
            window.requestFileSystem(__storageType, _size, 
                function(_fileSystem) { // Success
                    __fileSystem = _fileSystem;
                    __status = STATUS_INITIALIZED;
                    _deferred.resolve(_fileSystem);
                }, function(_error) { // Failure
                    __status = STATUS_NO_FILESYSTEM;
                    _deferred.reject(_error);
                });
        } catch (_error) {
            __status = STATUS_NO_FILESYSTEM;
            _deferred.reject(_error);
        }
    } else {
        _err.code = FILESYSTEM_ALREADY_INITIALIZED;
        _deferred.reject(_err);
    }

    return _deferred.promise();
};

/** @public @method createFile.
 * @desc Create file.
 * @param {string} (path/)filename. Must be string. Defaults to "file.txt".
 * @return Promise (see examples above). */
FileIO.prototype.createFile = function(_fileName) {
    /** @private */ var _err = { code: null };
    /** @private */ var _deferred = new jQuery.Deferred(); // Used for object Promise.
    if (typeof _fileName !== 'string') { _fileName = "file.txt"; } // Default to "file.txt" if not correct.
    if (__status != STATUS_NO_FILESYSTEM) { // Object must be initialized.
        try {
            __fileSystem.root.getFile(_fileName, { create: true, exclusive: true },
                function(_fileEntry) { // Success
                    _deferred.resolve(_fileEntry);
                }, function(_error) { // Failure
                    _deferred.reject(_error);
                });
        } catch (_error) {
            _deferred.reject(_error);
        }
    } else {
        _err.code = FILESYSTEM_NOT_INITIALIZED;
        _deferred.reject(_err);
    }

    return _deferred.promise();
};

/** @public @constructor init.
 * @desc Constructor for the class.
 * @param N/A.
 * @return N/A. */
FileIO.prototype.init = function() {
};

// Construct
this.init();
var appFileSystem = new FileIO();
appFileSystem.initFilesystem(true); // Persistent.
appFileSystem.createFile("testfile.txt").done(function(fileEntry) {  console.log("createFile: done. fileEntry: "+JSON.stringify(fileEntry)); }).fail(function(error) { console.log("createFile: fail. error.code: "+error.code); });