2012-12-15 3 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. 누구에게 더 좋은 해결책이 있습니까? (오류 코드 없음)

ps : Android 및 PhoneGap 1.7.0에서 작동합니다.

+0

자바 스크립트에서 시도 캐치를 사용하시기 바랍니다 다음 날 내가 할 수있는 경우에 알려 도움이 – 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"오프 첫 번째 디렉토리가 통화가 기본 측면에 밖으로 오류가 발생하지 존재하지 않는 디렉토리에 만약 DIR_Name을 만들 수 있기 때문에 getDirectory에 첫 번째 호출이 오류 콜백을 호출이 존재하지 않는 경우.

"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')); 
관련 문제