8

このAPIを使用してPhonegapにネストされたディレクトリを作成するにはどうすればよいですか?

fileSystem.root.getDirectory("Android/data/com.phonegap.myapp/dir_one/dir_two/", {create:true}, gotDir, onError);

Android2.2でPhonegap1.8.0を使用しています。

4

5 に答える 5

15

この関数は、ネストされたdirを作成するのに役立ちます。

document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
    console.log("device is ready");
    window.requestFileSystem  = window.requestFileSystem || window.webkitRequestFileSystem;
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
}

function fail() {
    console.log("failed to get filesystem");
}

function gotFS(fileSystem) {
    window.FS = fileSystem;

    var printDirPath = function(entry){
        console.log("Dir path - " + entry.fullPath);
    }

    createDirectory("dhaval/android/apps", printDirPath);
    createDirectory("this/is/nested/dir", printDirPath);
    createDirectory("simple_dir", printDirPath);
}

function createDirectory(path, success){
    var dirs = path.split("/").reverse();
    var root = window.FS.root;

    var createDir = function(dir){
        console.log("create dir " + dir);
        root.getDirectory(dir, {
            create : true,
            exclusive : false
        }, successCB, failCB);
    };

    var successCB = function(entry){
        console.log("dir created " + entry.fullPath);
        root = entry;
        if(dirs.length > 0){
            createDir(dirs.pop());
        }else{
            console.log("all dir created");
            success(entry);
        }
    };

    var failCB = function(){
        console.log("failed to create dir " + dir);
    };

    createDir(dirs.pop());
}

完全な例については、この要点を確認してください

于 2012-06-09T14:26:41.963 に答える
2

dhavalの関数に何かを追加するだけです。これは、Javascriptファイルシステムに準拠するブラウザーの防弾ではありません。Chromeで使用し、パスが空の文字列である場合、失敗します。Chromeでは、空の文字列でsplit()を使用すると、1つの要素配列が返され、1つの要素は空の文字列自体になります。ディレクトリの作成は失敗します。私は問題を修正するためにそれを変更しました(私自身の目的のために、他のいくつかの関連しない変更もあります):

function createPath(fs, path, callback) {
    var dirs = path.split("/").reverse();
    var root = fs.root;

    var createDir = function(dir) {
        if (dir.trim()!="") {
            root.getDirectory(dir, {
                create: true,
                exclusive: false
            }, success, function(dir) {
                error("failed to create dir " + dir);
            });
        } else {
            callback();
        }
    };

    var success = function(entry) {
        root = entry;
        if (dirs.length > 0) {
            createDir(dirs.pop());
        } else {
            callback();
        }
    };

    createDir(dirs.pop());
}
于 2013-07-25T09:31:54.450 に答える
1

このコードはあなたが望むことをするはずです:

window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(filesys) {
    filesys.root.getDirectory("story_repository", {create: true, exclusive: false}, function(dirEntry) {
        dirEntry.getDirectory("dir_name", {create: true, exclusive: false}, function(dirName) {
            dirName.getDirectory("img", {create: true, exclusive: false}, function(imgDir) {
                console.log("img creation worked");
            }, function(error) {
                console.log("create img failed");
            });
            dirName.getDirectory("res", {create: true, exclusive: false}, function(imgDir) {
                console.log("res creation worked");
            }, function(error) {
                console.log("create res failed");
            });
        }, function(error) {
            console.log("create dir_name failed");
        })
    }, function(error) {
        console.log("create story repository failed");
    });
}, function(error) {
    console.log("request file system failed");
});
于 2012-12-24T16:51:43.500 に答える
1

私はこれを使用しています:

function recursiveGetFile(root, path, opts, success, fail) {
    function dir(entry) {
        var name = path.shift();
        if (path.length > 0)
            entry.getDirectory(name, opts, dir, fail);
        else
            entry.getFile(name, opts, success, fail);
    }
    path = path.split('/');
    dir(root);
}, fail);
于 2013-12-15T18:18:43.503 に答える
1

cordova-phoengap用のシンプルなファイルマネージャーがあり、これを使用すると、これ以上のことができます。

https://github.com/torrmal/cordova-simplefilemanagement

ディレクトリを再帰的に作成できます。

//CREATE A DIRECTORY RECURSIVELY as simple as:

new DirManager().create_r('folder_a/folder_b',Log('created successfully'));

それが役立つかどうか教えてください

于 2014-04-05T16:56:33.350 に答える