Ionic 2本机文件:递归创建目录

时间:2018-01-21 15:53:02

标签: cordova ionic-framework ionic2 ionic3 ionic-native

我正在使用Ionic 2 Cordova插件文件将一些文件保存在Ionic Hybrid应用程序中。我想将它们存储在目录中,如果不存在,我会尝试创建:

this.file.createDir(this.getPathWithoutLast(absolutePath), this.getLastPathString(absolutePath), true);

我的绝对路径如下:

file:///data/user/0/io.ionic.starter/files/dir1/dir2/dir3/dir4

我收到错误{"代码":1,"消息":" NOT_FOUND_ERR"}。

经过一些测试,我认为该方法不能递归地创建目录,所以我实现了自己的方法来一个接一个地创建它们。

然而,这似乎是更多人需要的东西所以我想问一下插件中是否真的没有这样的选项,如果没有,是否有一个我没想到的原因。

感谢大家的时间! 帕沃尔

2 个答案:

答案 0 :(得分:0)

是的,我有同样的问题,所以结束编写我自己的函数来处理这个问题。

没有测试这个,因为我找不到原来的那个,但它应该是这样的

createRecursivePath(path: string | Array<string>): Promise<string> {

    if (typeof path === 'string') {
        path = path.split('/');
        return this.createRecursivePath(path);
    }

    if (!Array.isArray(path)) {
        return Promise.reject('Error on data entry');
    }
    let promiseArray: Array<Promise<DirectoryEntry>> = path.map((dirName, index, array) => {
        let createdDirPath = array.slice(0, index);
        return this.file.checkDir([this.getDefaultAppPath(), ...createdDirPath].join('/'), dirName)
            .then()
            .catch(() => this.file.createDir([this.getDefaultAppPath(), ...createdDirPath].join('/'), dirName,false));
    });

    return Promise.all(promiseArray)
        .then(() => Promise.resolve(Array.isArray(path) && path.join('/') || ''));
}

答案 1 :(得分:0)

我也会发布我的解决方案,以防万一:

{
  "plugins": ["transform-optional-chaining"]
}