Ionic 2 Native File:递归创建目录是否支持及报错咨询
关于Cordova File插件
createDir无法递归创建多级目录的问题解答 你好,针对你遇到的问题,我可以明确地告诉你:当前版本的Cordova File插件的createDir方法确实不支持递归创建多级目录,下面详细解释原因和相关细节:
1. 报错原因分析
你传入的绝对路径是file:///data/user/0/io.ionic.starter/files/dir1/dir2/dir3/dir4,调用createDir时,你期望直接创建dir4,但此时它的父目录dir3(甚至更上层的dir1、dir2)可能都不存在。而createDir的设计逻辑是:只能在已经存在的父目录下创建单级子目录,如果父目录不存在,就会抛出NOT_FOUND_ERR(错误码1),这正是你遇到的问题。
这里要注意,方法的第三个参数exclusive只是用来控制「如果目标目录已存在时是否抛出错误」,和递归创建中间目录完全无关。
2. 插件设计的底层逻辑
Cordova File插件的API是对原生平台文件系统API的封装:
- 在Android上,对应原生的
mkdir()方法,该方法默认只创建单级目录,不会自动创建不存在的父目录; - 在iOS上,对应
createDirectoryAtPath:withIntermediateDirectories:方法,这个方法本身支持递归创建,但插件的createDir并没有封装这个能力,而是默认只创建单级目录。
插件团队之所以没有默认支持递归创建,可能是为了保持API的简洁性,同时遵循多数原生API的基础行为逻辑——让开发者明确控制每一步的文件系统操作,避免因自动递归创建带来的意外行为。
3. 可行的解决方案
你自己实现的「逐个创建目录」的方法,是目前社区里解决这个问题的常规方案,具体思路大概是:
- 将完整路径按目录分隔符(
/)拆分成目录数组,比如['dir1', 'dir2', 'dir3', 'dir4']; - 从根目录(比如
this.file.dataDirectory)开始,依次遍历每个目录名; - 每一步都检查当前目录是否存在,不存在则调用
createDir创建; - 直到遍历完所有目录,最终完成多级目录的创建。
这种方式虽然需要自己写代码,但能精准控制每一步的操作,也符合插件的API设计逻辑。
内容的提问来源于stack exchange,提问作者PavolGanzarcik
相关产品推荐
相关产品推荐

