2012-10-12 57 views
3

我想使用phonegap的FILE API(實際上是w3c文件api)遍歷SD卡中所有目錄和子目錄中的每個文件。我必須通過查看它們的性質來對這些文件執行一些操作。我不想搜索特定類型的文件,而是按順序遍歷每個文件。使用phonegap文件api遍歷SD卡中的每個文件

有人可以幫助我嗎?只需要一個基本的循環框架以及遍歷所需的必要條件將會很有幫助。

謝謝您提前。

回答

3

我認爲下面的代碼應該工作:

window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onRequestFileSystem, fail); 

function onRequestFileSystem(fileSystem) { 
    var directoryReader = fileSystem.root.createReader(); 
    directoryReader.readEntries(onReadEntries, fail); 
} 

function onReadEntries(entries) { 
    var i; 
    for (i = 0; i < entries.length; i++) { 
     if (entries[i].isFile == true) { 
     // ... 
     } 
     if (entries[i].isDirectory == true) { 
     var directoryReader = entries[i].fullPath.createReader(); 
     directoryReader.readEntries(onReadEntries, fail); 
     } 
    } 
} 

http://www.c-sharpcorner.com/UploadFile/e83792/filesystem-directoryentry-objects-in-phonegap/

+0

對不起。我想我忘了提及。但我需要遍歷所有子目錄內的所有文件。我將再次編輯該問題。 –

+0

然後只是遞歸地 – shkschneider

+0

我無法弄清楚如何爲從readEntries()讀取的每個目錄創建目錄讀取器。 –

0
scan : function(url,fileType,callback) 
     { 
      var fileTypeCollection = []; 
      var defer = $q.defer(); 


       url.forEach(function(element, index) 
       { 
       //requestLocalFileSystemURL 
       log(element); 
       window.resolveLocalFileSystemURL(element,onRequestFileSystem, fail); 


       log("Ends resolve"); 
       }); 


      function onRequestFileSystem(fileSystem) 
      { 
       var directoryReader = fileSystem.createReader(); 
       directoryReader.readEntries(onReadEntries,fail); 
      } /*onRequestFile Ends*/ 

      function onReadEntries(entries) 
      { 


       if(entries.length==0) 
       { 
        log("Entries Length....Resolving"); 
        defer.resolve(fileTypeCollection); 
       } 
       else 
       { 
        entries.forEach(function(element, index) 
        { 

         if (element.isDirectory === true) 
         { 
         // Recursive -- call back into this subdirectory 

         onRequestFileSystem(element); 
         } 

         if(element.isFile == true) 
         { 

           fileType.forEach(function(type) 
           { 
            if(element.name.indexOf(type) != -1) 
            { 
             fileTypeCollection.push(element); 
            } 
           }); 
         } /*is File ENds*/ 
        }); /*Entries For Each Ends*/ 
       } 

      } /*OnRead Ends*/ 

      function fail(resp) 
      { 
       log(resp); 
       defer.reject(); 
      } /*Fail Ends*/ 

     return defer.promise; 

    } //Scan Function Ends 

嘗試。如果你願意,並使用callback.promises是有點破了,刪除承諾。如果你可以修復,那麼它確定其他使用推後文件類型