无法使用cordova删除文件?

时间:2016-03-16 13:40:13

标签: cordova ionic-framework cordova-plugins

我在此处保存文件:/storage/emulated/0/myApp/helloworld.wav

我正在尝试删除此文件

        window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, successCallback, errorCallback)

        function successCallback(fs) {
            fs.root.getFile('/storage/emulated/0/myApp/helloworld.wav', {
                create: false
            }, function(fileEntry) {
                fileEntry.remove(function() {
                    alert('File removed.');
                }, errorCallback);
            }, errorCallback);
        }

        function errorCallback(error) {
            alert("ERROR: " + error.code)
        }

它不会删除文件并始终返回error code 1(未找到)。任何人都可以帮我指出错误。

当我从文件管理器检查时,这是我的文件在物理上的位置:/storage/emulated/0/myApp/helloworld.wav但它总是返回错误代码1

2 个答案:

答案 0 :(得分:2)

我觉得下面这行可能是问题, “ window.requestFileSystem(LocalFileSystem.PERSISTENT,0,successCallback,errorCallback)

在我读过的一些帖子中,有人提到requestfilsystem方法和LocalFileSystem.PERSISTENT参数在android中不起作用,除非设备是root的。

我使用了 - “ window.resolveLocalFileSystemURL(cordova.file.externalRootDirectory,successCallback,errorCallback);

如果需要,我可以共享删除目录的示例代码及其中的文件。请告诉我。希望它有所帮助。

以下是根据请求的示例代码,

function clearDirectory() {

    if (sessionStorage.platform.toLowerCase() == "android") {
        window.resolveLocalFileSystemURL(cordova.file.externalRootDirectory, onFileSystemDirSuccess, fail);
    } else {
        //for ios
        window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFileSystemDirSuccess, fail);
    }
};

function onFileSystemDirSuccess(fileSystem) {
    var entry = "";
    if (sessionStorage.platform.toLowerCase() == "android") {
        entry = fileSystem;
    } else {
        //for ios
        entry = fileSystem.root;
    }
    entry.getDirectory("Folder_Name", {
            create: true,
            exclusive: false
        },
        function(entry) {
            entry.removeRecursively(function() {
                console.log("Delete successful !!!");
            }, fail);
        }, getDirFail);
};

function getDirFail(error) {
    alert("getDirFail - " + error.code);
};

function fail(error) {
    alert("fail - " + error.code);
};

文件创建:

function writeFile() {
            if (sessionStorage.platform.toLowerCase() == "android") {
                window.resolveLocalFileSystemURL(cordova.file.externalRootDirectory, onFileSystemSuccess, onError);
            } else {
                window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFileSystemSuccess, onError);
            }

        }    

        function onError(e) {
            alert("onError");
        };

        function onFileSystemSuccess(fileSystem) {
            var entry = "";
            if (sessionStorage.platform.toLowerCase() == "android") {
                entry = fileSystem;
            } else {
                entry = fileSystem.root;
            }
            entry.getDirectory("Folder_Name", {
                create: true,
                exclusive: false
            }, onGetDirectorySuccess, onGetDirectoryFail);
        };

        function onGetDirectorySuccess(dir) {
            dir.getFile(filename, {
                create: true,
                exclusive: false
            }, gotFileEntry, errorHandler);
        };

        function gotFileEntry(fileEntry) {
            // logic to write file in respective directory
        };

        function errorHandler(e) {
            // handle error
        }

答案 1 :(得分:0)

也许最好使用具有本机功能的插件,这样可以将文件保存到应该保存的位置,并保证读写访问权限。

您可以在此处查看:cordova-plugin-file

我不知道您尝试使用该代码的设备类型。在该页面中,您可以看到到不同操作系统(Android,iOS,Blackberry等)的所有不同文件系统路径。