You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用react-native-scoped-storage读取整个目录?

借助react-native-scoped-storage实现目录读取

你可以利用该包提供的listFiles方法实现类似RNFS readDir的目录读取功能,具体操作如下:

  1. 获取目标目录的Scoped URI
    通过openDocumentTree获取的权限对象中包含uri字段,这就是你选中目录的Scoped存储标识,后续所有目录操作都基于这个URI。

  2. 调用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);
}
  1. 解析返回结果
    listFiles返回的数组中,每个元素包含以下核心属性:

    • name: 文件/子目录的名称
    • uri: 对应资源的Scoped URI(可用于后续读取文件或递归遍历子目录)
    • isDirectory: 布尔值,标记当前资源是否为目录
    • size: 文件大小(仅对文件类型有效)
    • lastModified: 资源最后修改时间戳
  2. 递归读取子目录(可选)
    如果需要遍历整个目录树,可以基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 15:42:50