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 可以读取的目录的最大文件数的主要内容,如果未能解决你的问题,请参考以下文章
使用FileReader在Javascript中同步读取多个文件
使用 JavaScript 的 FileReader 接口检测文件的内容类型