2012-10-12 24 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是有点破了,删除承诺。如果你可以修复,那么它确定其他使用推后文件类型