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

Android下std::filesystem::directory_iterator不遍历普通文件问题

Cxxdroid中std::filesystem仅遍历目录不枚举文件的原因

1. 安卓分区存储权限限制(核心原因)

安卓10(API 29)及以上启用的**分区存储(Scoped Storage)**是最可能的诱因:

  • 公共目录(如/storage/emulated/0/Downloads)的访问权限被严格管控,Cxxdroid作为普通应用,默认只能访问自身创建的文件,或通过媒体库读取特定类型的媒体文件。
  • 目录的权限识别逻辑与普通文件不同,Cxxdroid有权枚举目录结构,但无权限读取目录下的普通文件,因此std::filesystem::directory_iterator仅返回它能访问的条目——也就是子文件夹。

2. Cxxdroid的std::filesystem实现适配缺陷

Cxxdroid依赖安卓平台的libstdc++/llvm-libc++,部分版本存在适配问题:

  • 未正确处理安卓存储的权限映射,导致无法枚举无权限的普通文件。
  • 旧版本Cxxdroid的std::filesystem实现不完整,目录遍历逻辑存在遗漏。

可行的临时解决方案

  • 开启存储权限:进入Cxxdroid的系统权限设置,开启「存储」权限;安卓11及以上需额外开启「所有文件访问权限」。
  • 切换到私有存储目录:将待处理文件移至Cxxdroid的私有目录(如/data/data/com.termux.cxxdroid/files),该目录不受分区存储限制,std::filesystem可正常遍历所有文件。
  • 结合安卓原生API:若权限申请无效,可通过JNI调用安卓原生文件枚举接口,再配合C++代码完成重命名逻辑。

内容的提问来源于stack exchange,提问作者God I Am Clown

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 20:08:15