如何用react-native-scoped-storage读取整个目录?
借助react-native-scoped-storage实现目录读取
你可以利用该包提供的listFiles方法实现类似RNFS readDir的目录读取功能,具体操作如下:
获取目标目录的Scoped URI
通过openDocumentTree获取的权限对象中包含uri字段,这就是你选中目录的Scoped存储标识,后续所有目录操作都基于这个URI。调用
listFiles读取目录内容
传入目录URI到ScopedStorage.listFiles()方法,即可获取该目录下的所有文件和子目录信息:
import ScopedStorage from 'react-native-scoped-storage'; // 假设已通过openDocumentTree拿到permission对象 const targetDirUri = permission.uri; try { const dirContents = await ScopedStorage.listFiles(targetDirUri); console.log('目录内容:', dirContents); } catch (err) { console.error('读取目录出错:', err); }
解析返回结果
listFiles返回的数组中,每个元素包含以下核心属性:name: 文件/子目录的名称uri: 对应资源的Scoped URI(可用于后续读取文件或递归遍历子目录)isDirectory: 布尔值,标记当前资源是否为目录size: 文件大小(仅对文件类型有效)lastModified: 资源最后修改时间戳
递归读取子目录(可选)
如果需要遍历整个目录树,可以基于listFiles编写递归函数:
const readDirRecursively = async (dirUri) => { const contents = await ScopedStorage.listFiles(dirUri); const result = []; for (const item of contents) { if (item.isDirectory) { // 递归读取子目录内容 const subDirData = await readDirRecursively(item.uri); result.push({ ...item, children: subDirData }); } else { result.push(item); } } return result; }; // 调用示例 const fullDirTree = await readDirRecursively(targetDirUri);
需要注意:react-native-scoped-storage返回的是Scoped URI,只能通过该包提供的API进行后续操作(比如读取文件、创建文件等),无法直接与RNFS的文件路径混用。
内容的提问来源于stack exchange,提问作者Raja Tayyab
相关产品推荐
相关产品推荐

