我是离子的新手。我需要删除本地驱动器位置中的所有文件。我试过下面的查询。但它不起作用
$cordovafile.removeFile(cordova.file.documentsDirectory,"filename").then(function(success){
console log("file removed"),
function error(error){
console log("Error")
});}
请建议您的解决方案。
答案 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);
});
};