【问题标题】:Nested directory creator: Phonegap嵌套目录创建者:Phonegap
【发布时间】:2012-06-13 05:31:48
【问题描述】:

如何使用此 API 在 Phonegap 中创建嵌套目录?

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

我在 Android 2.2 中使用 Phonegap 1.8.0。

【问题讨论】:

    标签: android cordova directory


    【解决方案1】:

    此功能将帮助您创建嵌套目录。

    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());
    }
    

    如需完整示例,请查看gist

    【讨论】:

    • 谢谢你,dhaval,你让我很开心。
    • 了解基础和高级水平的非常好的例子。谢谢达万
    • 干得好...非常感谢
    【解决方案2】:

    这段代码应该做你想做的:

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

    【讨论】:

      【解决方案3】:

      只是为 dhaval 的功能添加一些内容:对于任何兼容 Javascript 文件系统的浏览器来说,它都不是防弹的。如果您将它与 Chrome 一起使用并且您的路径是一个空字符串,它将失败,因为显然,对于 Chrome,在空字符串上使用 split() 会返回一个元素数组,一个元素本身就是一个 epmty 字符串,这会导致目录创建失败。我对其进行了修改以纠正问题(还有一些其他不相关的更改,出于我自己的目的):

      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());
      }
      

      【讨论】:

        【解决方案4】:

        我正在使用这个:

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

        【讨论】:

          【解决方案5】:

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

          如果有帮助请告诉我

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-09-28
            • 2021-10-10
            • 2012-02-29
            • 1970-01-01
            • 2015-05-13
            相关资源
            最近更新 更多