DirectoryReaderSync
非标准:此特性未标准化。我们不建议在生产环境中使用非标准特性,因为它们浏览器支持有限,并且可能会更改或被移除。但是,在没有标准选项的特定情况下,它们可以是合适的替代方案。
已弃用:此特性不再推荐。虽然某些浏览器可能仍然支持它,但它可能已经从相关的网络标准中删除,可能正在删除过程中,或者可能仅为兼容性目的而保留。请避免使用它,如果可能,请更新现有代码;请参阅本页底部的兼容性表格以指导您的决策。请注意,此特性可能随时停止工作。
DirectoryReaderSync 接口允许您读取目录中的条目。
警告:此接口已弃用,不再是标准规范的一部分。请勿再使用它。请改用 File and Directory Entries API。
基本概念
在调用此接口的唯一方法 readEntries() 之前,请先创建 DirectoryEntrySync 对象。但是,DirectoryEntrySync(以及 FileEntrySync)不是可以在调用应用程序和 Web Worker 线程之间传递的数据类型。这并不是什么大问题,因为您并不真正需要主应用程序和 worker 线程看到相同的 JavaScript 对象;您只需要它们能够访问相同的文件。您可以通过传递一组 filesystem: URL(这些只是字符串)而不是一组条目来做到这一点。您也可以使用 filesystem: URL 通过 resolveLocalFileSystemURL() 来查找条目。这会将您带回到 DirectoryEntrySync(以及 FileEntrySync)对象。
示例
在以下来自 HTML5Rocks (web.dev) 的代码片段中,我们创建了 Web Workers,并将数据从其中传递到主应用程序。
// Taking care of the browser-specific prefixes.
window.resolveLocalFileSystemURL =
window.resolveLocalFileSystemURL || window.webkitResolveLocalFileSystemURL;
// Create web workers
const worker = new Worker("worker.js");
worker.onmessage = (e) => {
const urls = e.data.entries;
urls.forEach((url) => {
window.resolveLocalFileSystemURL(url, (fileEntry) => {
// Print out file's name.
console.log(fileEntry.name);
});
});
};
worker.postMessage({ cmd: "list" });
以下是获取目录内容的 worker.js 代码。
// worker.js
// Taking care of the browser-specific prefixes.
self.requestFileSystemSync =
self.webkitRequestFileSystemSync || self.requestFileSystemSync;
// Global for holding the list of entry file system URLs.
const paths = [];
function getAllEntries(dirReader) {
const entries = dirReader.readEntries();
for (const entry of entries) {
// Stash this entry's filesystem in URL
paths.push(entry.toURL());
// If this is a directory, traverse.
if (entry.isDirectory) {
getAllEntries(entry.createReader());
}
}
}
// Forward the error to main app.
function onError(e) {
postMessage(`ERROR: ${e.toString()}`);
}
self.onmessage = (e) => {
const cmd = e.data.cmd;
// Ignore everything else except our 'list' command.
if (!cmd || cmd !== "list") {
return;
}
try {
const fs = requestFileSystemSync(TEMPORARY, 1024 * 1024 /* 1MB */);
getAllEntries(fs.root.createReader());
self.postMessage({ entries: paths });
} catch (e) {
onError(e);
}
};
方法
readEntries()
返回特定目录的条目列表。重复调用此方法,直到返回空数组为止。
语法
readEntries()
参数
无。
返回值
包含 FileEntrySync 和 DirectoryEntrySync 的数组。
异常
此方法可以引发具有以下代码的 DOMException
| 异常 | 描述 |
|---|---|
NOT_FOUND_ERR |
目录不存在。 |
INVALID_STATE_ERR |
自首次调用 readEntries 处理以来,目录已被修改。 |
SECURITY_ERR |
浏览器确定查找元数据不安全。 |
规范
此功能不再是任何规范的一部分。它已不再有望成为标准。
浏览器兼容性
加载中…