我正在使用Javascript编写将与Phonegap一起使用以制作Android应用程序的应用程序。我正在使用Phonegap File API来读取目录和文件。相关的代码如下所示:如何使用javascript迭代文件系统目录和文件?
document.addEventListener("deviceready", onDeviceReady, false);
// PhoneGap is ready
//
function onDeviceReady() {
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFileSystemSuccess, fail);
}
function onFileSystemSuccess(fileSystem) {
fileSystem.root.getDirectory("/sdcard", {create: false, exclusive: false}, getDirSuccess, fail);
}
function getDirSuccess(dirEntry) {
// Get a directory reader
var directoryReader = dirEntry.createReader();
// Get a list of all the entries in the directory
directoryReader.readEntries(readerSuccess,fail);
}
var numDirs = 0;
var numFiles = 0;
function readerSuccess(entries) {
var i;
for (i=0; i<entries.length; i++)
{
if(entries[i].isFile === true)
{
numFiles++;
entries[i].file(fileSuccess,fail);
}
else if (entries[i].isDirectory === true)
{
numDirs++;
getDirSuccess(entries[i]);
}
}
}
因此截至目前,程序工作正常。读者将读取/ sdcard目录中的内容。如果遇到文件,它会调用fileSuccess(为简洁起见,我已在代码中排除),如果遇到另一个目录,它将再次调用getDirSuccess。我的问题是这样的:我怎么知道整个/ sdcard目录是什么时候被读取的?我想不到通过/ sdcard目录不止一次完成此操作的好方法。任何想法都表示感谢,并提前感谢您!
这种方法做的工作,所以+1为了那个原因。我将millisecondsBetweenReadSuccess设置为5000,weAreDone()仅被调用一次。设置为4000,它会被调用两次。我希望避免使用时间敏感的函数,因为如果我在不同的设备上使用此代码,它可能无法正常工作(毫秒之间的读取成功可能需要更大)。如果我找不到更好的解决方案,我会将你的标记标记为已接受。如果我找到更优雅的解决方案,我一定会在这里发布。 – vdelricco
哇,5秒这是很长的时间。我会稍微修改一下,所以你没有这么长的超时时间。在我需要它之前,您通过验证我的想法来帮助我,所以我很感激。 –
有趣的是,将额外的if语句放在for循环中导致weAreDone函数被调用两次(同时设置为5秒)。 – vdelricco