FileSystemDirectoryEntry - 表示文件系统中的目录

非标准
该功能是非标准的。请尽量不要在生产环境中使用它:因为每个用户不一定会正常运行。它的实现可能存在很大的不兼容性,并且将来可能会改变行为。

FileSystemDirectoryEntry文件和目录条目 API 的接口,表示文件系统中的目录。它提供了一些方法,可以访问和操作目录中的文件,以及访问目录中的条目。

因为这是一个非标准 API,目前规范上没有该标准,所以请记住并非所有浏览器都实现它,可能只实现它的一小部分。有关详细信息,请查看浏览器兼容性部分。

基本概念

您可以通过调用 getDirectory() 来创建新目录。如果要创建子目录,请按顺序创建每个子目录。如果尝试使用完整路径创建目录,其中包含了不存在的父目录,则会返回错误。因此,应该在创建父目录后,通过递归添加新路径来创建层次结构。

实例

在下面的代码片段中,我们创建了一个名为 “Documents” 的目录。

// 处理特定于浏览器的前缀。
window.requestFileSystem  = window.requestFileSystem || window.webkitRequestFileSystem; 
window.directoryEntry = window.directoryEntry || window.webkitDirectoryEntry;

// ...

function onFs(fs){
  fs.root.getDirectory('Documents', {create:true}, function(directoryEntry){
    //directoryEntry.isFile === false
    //directoryEntry.isDirectory === true
    //directoryEntry.name === 'Documents'
    //directoryEntry.fullPath === '/Documents'

    }, onError);

  }

// 使用临时存储打开文件系统
window.requestFileSystem(TEMPORARY, 1024*1024 /*1MB*/, onFs, onError);

属性

该接口没有自己的属性,但从其父接口 FileSystemEntry 继承了属性。

方法

该接口从其父接口 FileSystemEntry 继承了方法。

createReader()

创建一个 FileSystemDirectoryReader 对象,可用于读取该目录中的条目。

getDirectory()

返回一个 FileSystemDirectoryEntry 对象,表示位于给定路径的目录,相对于调用该方法的目录。

getFile()

返回一个 FileSystemFileEntry 对象,表示位于目录层次结构中的文件,给定相对于调用该方法的目录的路径。

过时的方法

removeRecursively()

删除目录及其所有内容,包括子目录的内容。该方法已从规范中删除。

规范

规范 状态 备注
File and Directory Entries API 编者的草案 提议的 API 草案

该 API 没有正式的 W3C 或 WHATWG 规范。

桌面浏览器兼容性

特性 Chrome Edge Firefox Internet Explorer Opera Safari
基础支持 13 webkit 不支持1 50 不支持 支持 webkit 不支持
createReader 13 不支持 50 不支持 不支持 不支持
getDirectory 13 不支持 502 不支持 不支持 不支持
getFile 13 不支持 502 不支持 不支持 不支持
removeRecursively 13 不支持 50 — 523 不支持 不支持 不支持

移动浏览器兼容性

特性 Android Chrome for Android Edge mobile Firefox for Android IE mobile Opera Android iOS Safari
基础支持 支持 webkit 支持 webkit 支持 50 未知 不支持 不支持
createReader 支持 支持 未知 50 未知 不支持 不支持
getDirectory 支持 支持 未知 502 未知 不支持 不支持
getFile 支持 支持 未知 502 未知 不支持 不支持
removeRecursively 支持 支持 未知 50 — 523 未知 不支持 不支持

1. Edge 在 WebKitEntry 接口中实现该接口的功能,它称之为 FileSystemEntry

2. 在 Firefox 中,errorCallback 的输入参数是 DOMException 而不是 FileError 对象。

3. 虽然存在 removeRecursively() 方法,但是调用它会立即返回带有 NS_ERROR_DOM_SECURITY_ERR 错误的回调。

相关链接