Javascript 如何在Phonegap中创建嵌套目录

Javascript 如何在Phonegap中创建嵌套目录,javascript,android,html,cordova,html5-filesystem,Javascript,Android,Html,Cordova,Html5 Filesystem,我试过了,但根本不能满足我的要求。我写了一个新的: var file_system; var fs_root; window.requestFileSystem(LocalFileSystem.PERSISTENT, 1024*1024, onInitFs, request_FS_fail); function onInitFs(fs) { file_system= fs; fs_root= file_system.root; alert("ini fs"); create_D

我试过了,但根本不能满足我的要求。我写了一个新的:

var file_system;
var fs_root;
window.requestFileSystem(LocalFileSystem.PERSISTENT, 1024*1024, onInitFs, request_FS_fail);

function onInitFs(fs) {
  file_system= fs;
  fs_root= file_system.root;
  alert("ini fs");
  create_Directory();
  alert("ini fs done.");
}
var string_array;
var main_dir= "story_repository/"+ User_Editime;
string_array= new Array("story_repository/",main_dir, main_dir+"/rec", main_dir+"/img","story_repository/"+ User_Name );

function create_Directory(){
  var start= 0;
  var path="";
  while(start < string_array.length) {
    path = string_array[start];
    alert(start+" th created directory " +" is "+ path);
    fs_root.getDirectory(
      path,
      {create: true, exclusive: false},
      function(entry) {
        alert(path +"is created.");
      },
      create_dir_err()
    );
    start++;
  }//while loop
}//create_Directory

function create_dir_err() {
  alert("Recursively create directories error.");
}

function request_FS_fail() {
  alert("Failed to request File System ");
}
我只是反复调用
fs.root.getDirectory
,但失败了。但第一个几乎是一样的

  • 到底是什么问题?为什么第一个总是给我错误回调
  • 为什么第二个不能工作
  • 有谁有更好的解决方案吗?(无错误回调消息)

  • ps:我在Android和PhoneGap 1.7.0上工作。

    我无法找出您代码中的错误。我有一个通过PhoneGap2.0编写的本地化库。我已经从那里为您的需求提取了代码。看看它是否适用于1.7。我没有在抽象之后测试代码。您可能需要修复错误(如果有)

      var fsroot = fs.root; // initialize this
    
      function fileGetDir(path, cb) {
        var fnGetOrCreateDir = function(p, de) {
          var entry = p.shift();
          if (entry) {
            de.getDirectory(entry, {
              create : true
            }, function(dirEntry) {
              fnGetOrCreateDir(p, dirEntry);
            }, fileFSError);
          } 
          else
            if (cb) cb(de);
        };
    
        if (path) {
          var arPath = path.split("/");
          fnGetOrCreateDir(arPath, fsroot);
        }
        else {
          if (cb) cb(fsroot);
        }
      }
    
      function fileFSError(e) {
        console.log(e.code);
        try {
          console.log("fileFSError: " + JSON.stringify(e));
        } catch (err) {}
      }
    
    function printSuccess(dirEntry) {
        console.log(dirEntry.fullPath);
    }
    
    // Now create your directories like:
    var main_dir= "story_repository/"+ User_Editime;
    fileGetDir(mainDir + "/rec", printSuccess);
    fileGetDir(mainDir + "/img", printSuccess);
    fileGetDir("story_repository/"+ User_Name, printSuccess);
    

    如果根目录“story_repository”下的第一个目录不存在,那么对getDirectory的第一次调用将调用错误回调,因为在不存在的目录中创建dir_name的调用将在本机端出错


    “故事库”存在吗?

    cordova phoengap有一个简单的文件管理器:

    您可以递归创建目录:

    //CREATE A DIRECTORY RECURSIVELY
    
    var a = new DirManager(); // Initialize a Folder manager
    a.create_r('folder_a/folder_b',Log('created successfully'));
    

    请在javascript中使用try-catch,然后告诉我是否可以在成功(文件系统){console.log(fileSystem.name);}//请求持久文件系统窗口。请求文件系统(LocalFileSystem.persistent,0,onSuccess,onError)@skhurams 2.2.0文档仍然没有告诉我们如何创建嵌套目录。。。我将尝试使用onSuccess(文件系统)。。。当你使用onsuccess时,它会告诉你是什么错误,我稍后会检查。我现在被一些其他令人烦恼的问题打断了。。。抱歉,您的示例仅创建一个目录“story\u repository/”+User\u Editime+“/rec”。但我需要的是在任意路径上依次创建许多目录:“story\u repository/”+dir\u name+“/img/”、“story\u repository/”+dir\u name+“/rec/”、“XXX”。为什么不为每个目录调用它呢?是的,它确实存在,我尝试了两种方法:一种是创建“story\u repository”手动创建,第二个是这个示例:我通过在string_数组中指定第一个元素来创建目录。string_array=新数组(“story_repository/”,main_dir,main_dir+”/rec,main_dir+“/img”,“story_repository/”+用户名);应该首先创建story_存储库,事实确实如此。但是,errorCallback仍然会发生。成功的回调也会发生。。。
    //CREATE A DIRECTORY RECURSIVELY
    
    var a = new DirManager(); // Initialize a Folder manager
    a.create_r('folder_a/folder_b',Log('created successfully'));