如何删除cordova离子中一个位置的所有文件

时间:2017-05-02 09:12:45

标签: cordova ionic-framework

我是离子的新手。我需要删除本地驱动器位置中的所有文件。我试过下面的查询。但它不起作用

    $cordovafile.removeFile(cordova.file.documentsDirectory,"filename").then(function(success){
console log("file removed"),
function error(error){
console log("Error")
});}

请建议您的解决方案。

2 个答案:

答案 0 :(得分:2)

安装cordova plugin add cordova-plugin-file 然后向你的控制器注入$cordovaFile这样的东西

 app.controller('MyCtrl', function($scope, $cordovaFile) {}

然后尝试

$cordovaFile.removeFile(path,file)
      .then(function (success) {
        // success
      }, function (error) {
        // error
      });

removeFile 仅删除单个文件,而不是$cordovaFile.removeDir(path,directory)

删除整个目录本身

答案 1 :(得分:0)

基本上你列出文件夹中的文件,然后创建一个删除每个文件的promises'数组。当删除所有这些内容时,调用.then()允许你继续处理你的东西。

本解决方案在完成后与离子1.x(可能也是2+,不知道)一起工作:

安装cordova插件添加cordova-plugin-file。

我将它与离子原生包装一起使用 我建议你创建一个服务

function FileSystemSrv($cordovaFile, $q)
{
    var service                         = {}; 
    service.data_storage_root           = "";
    service.resolved_data_storage_root  = "";
    //====================================================
    service.init = function(data_storage_root)
    {  
        service.data_storage_root           = data_storage_root;
        service.resolved_data_storage_root  = cordova.file[service.data_storage_root];
        return service.resolved_data_storage_root;        
    };    
    //--------------------------------------------------------------
    service.getExtension = function(fullname)
    {
        var arr = fullname.split(".");
        return arr[arr.length-1];
    };    
    //-------------------------------------------------------------------
    // invoke the then(), returning 1 or 0, instead of invoking the success or error callbacks
    service.existFile = function(relative_path)
    {
         return $cordovaFile.checkFile(service.resolved_data_storage_root, relative_path)
        .then(function (success){
            return 1;  
        })
        .catch(function (error){
            return $q.resolve(0);
        });        
     };


    //--------------------------------------------------------------
    //return all the files contained in a folder, belonging to the [valid_extensions] formats.
    service.listFilesInDir = function(relative_path, valid_extensions)
    {
        var len_ext = 0;
        if(valid_extensions != null) len_ext = valid_extensions.length;

        return $cordovaFile.listDir(service.resolved_data_storage_root, relative_path)
        .then(function(dirs)
        {
            var len = dirs.length;
            var arr = [];
            var cnt = 0;
            for (d=0; d<len; d++)
            {
                if (!dirs[d].isDirectory)
                {
                    var insert = false;
                    if(len_ext)
                    {
                        // filter input files: show only some extensions
                        var ext = service.getExtension(dirs[d].name);
                        for (e=0; e<valid_extensions.length; e++)
                        {    
                            if( ext == valid_extensions[e])
                            {
                                insert = true; 
                                break;
                            }
                        }
                    }
                    else insert = true;
                    if(insert)
                    {
                        arr[cnt] = dirs[d].name;
                        cnt++;
                    }
                }
            }
            return arr;            
        })
        .catch(function(error){
            console.log("FileSystemSrv::listFilesInDir" + error.message);
            return $q.reject(error);
        });
    };    

    service.deleteFile = function(relative_path)
    {
        return service.existFile(relative_path)
        .then(function(exist){        
            if (exist)  return $cordovaFile.removeFile(service.resolved_data_storage_root, relative_path);
            else        return 1;
        })
        .catch(function(error){
            console.log("FileSystemSrv::deleteFile" + JSON.stringify(error));            
            return $q.reject(error);
        });
    };

    service.deleteFilesInFolder = function(relative_path, valid_extensions)
    {
        return service.listFilesInDir(relative_path, valid_extensions)
        .then(function(files)
        {
            var subPromises = [];
            for (var f=0; f<files.length; f++) 
            {
                (function(fname) 
                {
                    var subPromise  = service.deleteFile(fname)
                    subPromises.push(subPromise);
                })(relative_path + "/" + files[f]);
            }
            return $q.all(subPromises);
        })
        .then(function()
        {
            return $q.defer().resolve(1);
        })
        .catch(function(error)
        {
            console.log("FileSystemSrv::deleteFilesInFolder" + JSON.stringify(error));            
            $q.reject(error);
        });
    };
    return service;
}
main_module.service('FileSystemSrv', FileSystemSrv);

然后在你的控制器中(注入服务)创建这个方法:

$scope.deleteSession = function() 
{
    FileSystemSrv.init("externalRootDirectory");

    return FileSystemSrv.deleteFilesInFolder($scope.relpath, ["wav", "jpg"])       // relpath = "AFolder/asubfolder" a subfolder of externalRootDirectory
    .then(function()
    {
        // do something  
    })
    .catch(function(error){
        alert(error.message);
    });
};