如何使用expo-file-system正确判断文件是否存在?
Expo FileSystem 文件存在性校验失效解决方案
问题根因
- 异步逻辑混用
await和then链式调用,写法不规范可能导致返回值时序异常 - 未传入
getInfoAsync的校验配置项,默认逻辑对部分未归一化路径的存在性判断会出现误判 - 未排除同名目录的干扰:如果对应路径下存在和目标文件同名的目录,
exists字段也会返回true,不符合文件校验的需求
正确实现代码
import * as FileSystem from 'expo-file-system'; const targetUri = 'file:///data/user/0/host.exp.exponent/files/ExperienceData/UNVERIFIED-192.168.0.66-CPEX-Force/2021-09-05.doc'; try { // 传入normalize参数对路径做归一化处理,保证存在性判断准确 const response = await FileSystem.getInfoAsync(targetUri, { normalize: true }); // 同时校验路径存在、且不是目录,才判定为目标文件存在 const isTargetFileExist = response.exists && !response.isDirectory; if (isTargetFileExist) { // 文件存在,执行对应逻辑 } else { // 文件不存在,执行后续逻辑 } } catch (err) { // 路径非法、无读写权限等异常场景,统一按文件不存在处理 console.error('文件校验失败:', err); }
注意事项
- 确保App已申请对应存储目录的读写权限,Android 11及以上版本的分区存储规则会影响私有目录外的路径校验结果
- 如果目标路径是动态获取的,先做非空和格式校验再传入方法,避免空值或非法路径导致的误判
内容的提问来源于stack exchange,提问作者João Lucas
相关产品推荐
相关产品推荐

