4

これを試してみましたが、私の要求をまったく満たしていませんでした。私は新しいものを書きます:

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:"alert("ディレクトリの再帰的作成エラー");"

まず、これを試して失敗したため、このコードは機能しないと思います。

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枚目はほぼ同じ…

  1. 一体何が問題なのですか?最初のもので常に ErrorCallback が返されるのはなぜですか?
  2. 2番目のものが機能しないのはなぜですか?
  3. 誰かがより良い解決策を持っていますか? (ErrorcallBack メッセージなし)

ps: 私は Android と PhoneGap 1.7.0 で作業しています。

4

3 に答える 3

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);
于 2012-12-15T11:00:45.377 に答える
1

cordova-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'));
于 2014-04-05T16:52:27.817 に答える
-1

ルート「story_repository」の最初のディレクトリが存在しない場合、getDirectory への最初の呼び出しでエラー コールバックが呼び出されます。これは、存在しないディレクトリに dir_name を作成する呼び出しがネイティブ側でエラーになるためです。

「story_repository」は存在しますか?

于 2012-12-17T02:00:59.237 に答える