JavaScript 中 FileReader#readEntries 可以读取的目录的最大文件数

Posted

技术标签:

【中文标题】JavaScript 中 FileReader#readEntries 可以读取的目录的最大文件数【英文标题】:Maximum files of a directory that can be read by FileReader#readEntries in JavaScript 【发布时间】:2014-07-12 11:28:23 【问题描述】:

我正在创建一个 Chrome 应用程序。我必须读取目录的文件,并且我使用的是DirectoryEntry API 和DirectoryReader API。

我的问题是使用 DirectoryReader#readEntries 读取的最大文件数为 100,前 100 个(字母顺序)

var reader = currentDir.createReader();
var read = reader.readEntries.bind(reader, function(files) 
    for ( var i = 0; i < files.length; i++)
         if (files[i].name == nameSearches)
                callback(files[i]);
            

        
    )
    callback(undefined)

read();

files.length的值为100,目录下文件较多

我不确定此限制是否与 Google Chrome、Google Chrome 应用程序、javascript...有关,以及是否可以克服此限制

标记解决方案的结果代码是这样的:

var reader = currentDir.createReader();
var read = reader.readEntries.bind(reader, function(files) 
    if (files.lenght == 0) 
        callback(undefined);
    
    for ( var i = 0; i < files.length; i++)
        if (files[i].name == nameSearches)
                callback(files[i]);
            

        
    )
    read();


read();

【问题讨论】:

你也可以看看bro-fs 包,它解决了这个问题,还提供了方便的基于承诺的文件API接口。 【参考方案1】:

阅读您链接的文档!

这个接口的唯一方法,readEntries() 是列出所有 目录中的文件和文件夹。要列出所有条目,您 需要做到以下几点:

    调用directoryEntry.createReader()创建一个新的DirectoryReader。 致电readEntries()继续拨打readEntries() 直到空 数组被返回。您必须这样做,因为 API 可能不会 在一次调用中返回所有条目。

【讨论】:

非常感谢。写完这篇文章后,我只是在考虑那个解决方案。显然有效。这个例子解释了它(developer.mozilla.org/en-US/docs/Web/API/DirectoryReader)。我必须改进对解决方案的搜索... WTF readEntries() 只读取部分条目。糟糕的设计,该函数应明确接受每次调用返回的最大条目数的参数(没有默认值)。如果函数是异步的,你如何“继续调用函数”? Gianluca Ghettini :您创建一个递归函数,如果读取条目的结果不是空数组,则该函数会再次调用 readEntries。因此,如果您有 325 个项目,它将被调用五次,返回 100、100、100、25 然后 0 个项目。一旦它返回零,您就不会再次调用它。 哦,天哪,这太糟糕了,因为它看起来正在工作,但只有当您使用大量文件尝试它时,它才会不完整。我和 Gianluca 在一起,应该有某种必需的参数来确认这种行为。

以上是关于JavaScript 中 FileReader#readEntries 可以读取的目录的最大文件数的主要内容,如果未能解决你的问题,请参考以下文章

javascript_FIleReader对象

使用FileReader在Javascript中同步读取多个文件

使用 JavaScript 的 FileReader 接口检测文件的内容类型

JavaScript 中的FileReader对象(实现上传图片预览)

Javascript FileReader 读取文件不正确

带有 FileReader() 的 Javascript 承诺