2012-06-09 14 views
8

Jak mogę utworzyć katalog zagnieżdżony w Phonegap przy użyciu tego interfejsu API?Twórca katalogu zagnieżdżonego: Phonegap

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

Używam Phonegap 1.8.0 w systemie Android 2.2.

Odpowiedz

14

Ta funkcja pomoże Ci utworzyć zagnieżdżone katalogi.

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

Dla pełnej przykład sprawdzić ten gist

+0

Dziękuję @dhaval –

+0

nie pracować dla Ciebie ?? – dhaval

+0

Nie sprawdziłem tego kodu, wprowadziłem zmiany w moim własnym kodzie. –

1

Ten kod powinien robić to, co chcesz:

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

Wystarczy dodać coś do funkcji Dhaval za: to nie jest kuloodporne dla każdej zgodnej z Javascript System plików. Jeśli użyjesz go w Chrome, a twoja ścieżka będzie pustym łańcuchem, to się nie powiedzie, bo podobno w Chrome użycie metody split() na pustym łańcuchu zwraca tablicę jednoczęściową, z której jeden element jest ciągiem epistołowym, co powoduje tworzenie katalogu nie powiedzie się. I zmodyfikowano go w celu skorygowania problemu (tam również kilka innych zmian nie związanych, dla własnych celów):

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

używam to:

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

Istnieje prosty menedżer plików dla Cordova-phoengap, zz można to zrobić i wiele więcej:

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

można rekursywnie utworzyć katalogi:

//CREATE A DIRECTORY RECURSIVELY as simple as: 

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

Daj mi znać, jeśli to pomaga

Powiązane problemy