3

我正在尝试删除一个目录及其内容PhoneGap on Android

deleteDirectory = function deleteDirectory(uri) {
    uri = uri.substring(0, uri.lastIndexOf('/'));
    return $.Deferred(function (def) {
        fileSystem.root.getDirectory(uri, {
            create: false
        }, function (directory) {
            directory.removeRecursively();
            def.resolve();
        }, function (error) {
            resolveError("Error deleting directory: ", error, def);
        });
    }).promise();
}

出现以下错误:File No Modification Allowed Error

我已确认已设置此权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

我还应该去哪里寻找?

4

2 回答 2

10

我已经用这种方法做到了:



    function ClearDirectory() {
        window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFileSystemSuccess, fail);
        function fail(evt) {
            alert("FILE SYSTEM FAILURE" + evt.target.error.code);
        }
        function onFileSystemSuccess(fileSystem) {
            fileSystem.root.getDirectory(
                 "yours/dir/ect/ory",
                {create : true, exclusive : false},
                function(entry) {
                entry.removeRecursively(function() {
                    console.log("Remove Recursively Succeeded");
                }, fail);
            }, fail);
        }
    }


于 2013-08-06T14:37:31.140 回答
3

从这个答案

如果您想访问cordova.file.*(例如cordova.file.dataDirectory)下的位置,我建议使用resolveLocalFileSystemURL,这是大多数时候(如果不是总是),如果需要访问文件系统的根目录。

这也节省了一些代码行并且更具可读性:

deleteFolder(fileName: string) {
    const uri = `${cordova.file.dataDirectory}${fileName}`;
    window.resolveLocalFileSystemURL(uri, (dirEntry: DirectoryEntry) => {
        dirEntry.removeRecursively(
            () => console.log('successfully deleted the folder and its content'),
            e => console.error('there was an error deleting the directory', e.toString())
        )
    });
}

这里有一个等待的版本:

deleteFolder(fileName: string): Promise<void> {
    const promise = new Promise<void>((resolve, reject) => {
        const uri = `${cordova.file.dataDirectory}${fileName}`;
        window.resolveLocalFileSystemURL(uri, (dirEntry: DirectoryEntry) => {
            dirEntry.removeRecursively(() => resolve(), e => reject(e));
        }, e => reject(e));
    });
    return promise;
}
于 2019-07-25T07:36:03.050 回答