2012-12-15 72 views
4

我試過this,但它完全不滿足我的要求。我寫一個新問題:如何在Phonegap中創建嵌套目錄

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

雖然創建的目錄中,它發送我

ErrorCallback:「警報(」遞歸創建目錄錯誤「);」

首先,我不認爲這個代碼將工作,因爲我已經嘗試了這一點,這失敗:

window.requestFileSystem(
    LocalFileSystem.PERSISTENT, 
    0, 
    //request file system success callback. 
    function(fileSys) { 
    fileSys.root.getDirectory(
     "story_repository/"+ dir_name, 
     {create: true, exclusive: false}, 
     //Create directory story_repository/Stallman_time. 
     function(directory) { 
     alert("Create directory: "+ "story_repository/"+ dir_name); 
     //create dir_name/img/ 
     fileSys.root.getDirectory { 
      "story_repository/"+ dir_name + "/img/", 
      {create: true, exclusive: false}, 
      function(directory) { 
      alert("Create a directory: "+ "story_repository/"+ dir_name + "/img/"); 
      //check. 
      //create dir_name/rec/ 
      fileSys.root.getDirectory { 
       "story_repository/"+ dir_name + "/rec/", 
       {create: true, exclusive: false}, 
       function(directory) { 
       alert("Create a directory: "+ "story_repository/"+ dir_name + "/rec/"); 
       //check. 
       //Go ahead. 
       }, 
       createError 
      } 
      //create dir_name/rec/ 
      }, 
      createError 
     } 
     //create dir_name/img 
     }, 
     createError 
    ); 
    }, 
    //Create directory story_repository/Stallman_time. 
    createError()); 
} 

我只是一再只能打電話fs.root.getDirectory但失敗了。但第一個幾乎是一樣的...

  1. 什麼問題呢?爲什麼第一個總是給我ErrorCallback?
  2. 爲什麼不能第二個工作?
  3. 有沒有人有更好的解決方案? (無ErrorcallBack味精)

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

+0

請在JavaScript中使用嘗試捕捉,然後讓我知道,如果我能幫助 – skhurams

+0

嘗試此功能onSuccess(fileSystem){console.log(fileSystem.name); } //請求持久性文件系統 window.requestFileSystem(LocalFileSystem.PERSISTENT,0,onSuccess,onError); – skhurams

+0

http://docs.phonegap.com/en/2.2.0/cordova_file_file.md.html#DirectoryEntry – skhurams

回答

1

我無法找出代碼中的錯誤。我有一個通過PhoneGap 2.0編寫的圖書館來執行localIO。我從那裏抽象出了你的需求代碼。看看它是否適用於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); 
+0

我稍後會看看。我目前被其他一些煩惱問題打斷...抱歉。 – Stallman

+0

@Stallman:好奇地想知道發生了什麼...... – closure

+0

你的例子在這裏只創建一個目錄「story_repository /」+ User_Editime +「/ rec」。但我需要的是在任何路徑上連續創建大量目錄:「story_repository /」+ dir_name +「/ img /」,「story_repository /」+ dir_name +「/ rec /」,「XXX」。 – Stallman

-1

如果第一個目錄關閉根「story_repository」不存在你要getDirectory第一個電話會調用錯誤回調因爲調用一個不存在的目錄創建DIR_NAME會報錯了對本機端。

「story_repository」是否存在?

+0

是的,它確實存在,我嘗試了兩種方法:一種是手動創建「story_repository」,另一種是這個示例: 我通過給string_array中的第一個元素創建目錄。 string_array = new Array(「story_repository /」,main_dir,main_dir +「/ rec」,main_dir +「/ img」,「story_repository /」+ User_Name); 應該首先創建story_repository,並且它已經創建。但是,errorCallback仍然會發生。成功的回撥也會發生... – Stallman

1

沒有爲科爾多瓦-phoengap一個簡單的文件管理器:

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

可以遞歸地創建目錄:

//CREATE A DIRECTORY RECURSIVELY 

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