我刚刚开始发现Windows StoreApps(微软称之为),我正在关注使用 FolderPicker 的示例代码here。
我希望遍历该文件夹并阅读所有子文件夹和文件。
我看过两个功能,我认为这是我需要的功能但是在尝试几个小时之后我无法正常工作。
在上面的链接中,该行显示:
WinJS.log && WinJS.log("Picked folder: " + folder.name, "sample", "status");
我试图用以下内容深入挖掘文件夹:
folder.getFoldersAsync().then(function (folderItem) {
document.getElementById('musicFolder').innerHTML += folderItem.length + " folders)<br/>";
folderItem.forEach(function (x) {
document.getElementById('musicFolder').innerHTML += "--" + x.name + "<br/>";
x.getFilesAsync().then(function (items) {
document.getElementById('musicFolder').innerHTML += items.length + " files"+"<br>";
});
});
});
更新:
我一直在努力,但在迭代文件夹和子文件夹时却无法组织这些东西。
@ Damir的代码不挖最深的文件夹。我们需要一个递归函数。我可以提出以下功能,但正如我所说,结果没有组织function scanFolder(folder) {
var isInc = false;
folder.getFoldersAsync().then(function (folderItem) {
if (folderItem.length > 0) {
folderItem.forEach(function (x) {
if (!isInc) {
isInc = true;
hyphen += "-";
}
document.getElementById('musicFolder').innerHTML += hyphen + x.name + "</br>";
x.getFilesAsync().then(function (items) {
items.forEach(function (item) {
allTracks.push({
name: item.name,
path: item.path
});
document.getElementById('musicFolder').innerHTML += hyphen +"-"+ item.name + "</br>";
});
}).done(function () {
scanFolder(x);
});
});
}
});
}
答案 0 :(得分:3)
您想要阅读所有子文件夹及其中的文件吗?这样的事情应该有效:
folder.getFoldersAsync().then(function (folderItem) {
document.getElementById('musicFolder').innerHTML += "(" + folderItem.length + " folders)<br/>";
folderItem.forEach(function (x) {
x.getFilesAsync().then(function (items) {
document.getElementById('musicFolder').innerHTML += "--" + x.name + " (" + items.length + " files)<br>";
items.forEach(function(item) {
document.getElementById('musicFolder').innerHTML += "----" + item.name + "<br>";
});
});
});
});
编辑:
实际上不需要递归来递归扫描WinRT中的文件夹及其子文件夹。您可以改为使用StorageFolder.CreateFileQueryWithOptions():
var options = new Windows.Storage.Search.QueryOptions(Windows.Storage.Search.CommonFileQuery.defaultQuery, ['*']);
options.folderDepth = Windows.Storage.Search.FolderDepth.deep;
folder.createFileQueryWithOptions(options).getFilesAsync().then(function (files) {
var paths = new Array();
files.forEach(function(file) {
paths.push(file.path);
});
paths.sort();
paths.forEach(function(path) {
document.getElementById('musicFolder').innerHTML += path + "<br>";
});
});
从这里开始,您可以将平面文件列表转换为您需要的任何内容,而不仅仅是打印出它们的路径。