我试图读取目录条目中的所有条目。我可以这样做,但是我不确定在完全完成时应该将代码放在哪里。这就是我所拥有的:
function readcontents(folder, callback) {
var contents = []
function readsome(reader) {
reader.readEntries(function(entries) {
for(var entry of entries) {
if(entry.isDirectory) {
readsome(entry.createReader())
} else {
contents.push(entry)
}
}
if(entries.length) {
readsome(reader)
}
})
}
readsome(folder.createReader())
}
答案 0 :(得分:1)
我能够通过保留一个计数器来确定它何时结束。
function readcontents(folder, callback) {
var reading = 0
var contents = []
function readsome(reader) {
reading = reading + 1
reader.readEntries(function(entries) {
reading = reading - 1
for(var entry of entries) {
if(entry.isDirectory) {
readsome(entry.createReader())
} else {
contents.push(entry)
}
}
if(entries.length) {
readsome(reader)
} else if(reading == 0) {
callback(contents)
}
})
}
readsome(folder.createReader())
}
readcontents(folder, function(files) {
console.log(files)
})
答案 1 :(得分:0)
我找了很多地方来回答这个问题,但结果却是自己做了。此函数跟踪它仍然需要读取的所有子目录,然后递归调用自身,每个子目录添加到找到的文件列表。当它们没有剩下子目录时,它将回调列表。
function readDirRecursive(dir, callback) {
const subDirs = [];
function readDir(dir, files) {
files = files || [];
const reader = dir.createReader();
reader.readEntries(entries => {
Array.from(entries).forEach(entry => {
if(entry.isDirectory) {
subDirs.push(entry);
} else {
files.push(entry);
}
});
if (!subDirs.length) {
return callback(files);
}
readDir(subDirs.pop(), files);
});
}
readDir(dir);
}
注意:要从条目中获取实际文件,您需要执行以下操作:
readDirRecursive(directory, entries => {
entries.map(e => e.file(f => doSomethingWithFile(f));
});