我正在使用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