cordova中的文件大小函数
File size function in cordova
也许这是一个简单的问题,但我已经搜索了两天,但找不到答案。
我正在用 cordova 开发一个文件管理器,只是为了学习 cordova-plugin-file。
我已经使用这个函数获得了一个文件夹中的文件列表:
window.resolveLocalFileSystemURL(cordova.file.externalDataDirectory, function (dirEntry) {
var directoryReader = dirEntry.createReader();
directoryReader.readEntries(function(entries) {
var row;
for (i=0; i<entries.length; i++) {
row = entries[i];
console.log(row.name);
}
}, function(error) {
console.log(error);
});
}, function(error) {
console.log(error);
});
现在我想在文件名旁边打印文件大小,所以我编写了这个函数来给出文件大小:
function getFileSize(file) {
window.resolveLocalFileSystemURL(file, function (fileEntry) {
fileEntry.file(function(fileObj) {
var bytes = fileObj.size;
var i = Math.floor(Math.log(bytes) / Math.log(1024)),
sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
returnSize = (bytes / Math.pow(1024, i)).toFixed(2) * 1 + ' ' + sizes[i];
});
});
}
有没有办法在 for 循环中实现这样的功能?
var row;
var size;
for (i=0; i<entries.length; i++) {
row = entries[i];
size = getFileSize(cordova.file.externalDataDirectory + row.name);
console.log(row.name);
}
我知道问题出在文件插件的异步特性上,但我找不到解决方案/实现我在这里编写代码的正确语法是什么。
不,你不能这样做,由于调用的异步性质,你需要一个回调。然后就可以渲染了。
我相信您的条目数组中有所有文件 names/paths。遍历该数组并将大小保存在另一个数组中,做这样的事情
var size_array = [];
var total = 0;
for(var i = 0; i < entries.length; i++){
getFileSize(i);
}
function getFileSize(index) {
window.resolveLocalFileSystemURL(entries[index], function (fileEntry) {
fileEntry.file(function(fileObj) {
var bytes = fileObj.size;
var i = Math.floor(Math.log(bytes) / Math.log(1024)),
sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
size_array[index] = (bytes / Math.pow(1024, i)).toFixed(2) * 1 + ' ' + sizes[i];
total ++;
if(total === entries.length){
filesReady();
}
});
});
}
function filesReady(){
for(var i = 0; i < entries.length; i++){
entries[i] <-- your file
size_array[i] <-- its size
}
}
也许这是一个简单的问题,但我已经搜索了两天,但找不到答案。
我正在用 cordova 开发一个文件管理器,只是为了学习 cordova-plugin-file。
我已经使用这个函数获得了一个文件夹中的文件列表:
window.resolveLocalFileSystemURL(cordova.file.externalDataDirectory, function (dirEntry) {
var directoryReader = dirEntry.createReader();
directoryReader.readEntries(function(entries) {
var row;
for (i=0; i<entries.length; i++) {
row = entries[i];
console.log(row.name);
}
}, function(error) {
console.log(error);
});
}, function(error) {
console.log(error);
});
现在我想在文件名旁边打印文件大小,所以我编写了这个函数来给出文件大小:
function getFileSize(file) {
window.resolveLocalFileSystemURL(file, function (fileEntry) {
fileEntry.file(function(fileObj) {
var bytes = fileObj.size;
var i = Math.floor(Math.log(bytes) / Math.log(1024)),
sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
returnSize = (bytes / Math.pow(1024, i)).toFixed(2) * 1 + ' ' + sizes[i];
});
});
}
有没有办法在 for 循环中实现这样的功能?
var row;
var size;
for (i=0; i<entries.length; i++) {
row = entries[i];
size = getFileSize(cordova.file.externalDataDirectory + row.name);
console.log(row.name);
}
我知道问题出在文件插件的异步特性上,但我找不到解决方案/实现我在这里编写代码的正确语法是什么。
不,你不能这样做,由于调用的异步性质,你需要一个回调。然后就可以渲染了。
我相信您的条目数组中有所有文件 names/paths。遍历该数组并将大小保存在另一个数组中,做这样的事情
var size_array = [];
var total = 0;
for(var i = 0; i < entries.length; i++){
getFileSize(i);
}
function getFileSize(index) {
window.resolveLocalFileSystemURL(entries[index], function (fileEntry) {
fileEntry.file(function(fileObj) {
var bytes = fileObj.size;
var i = Math.floor(Math.log(bytes) / Math.log(1024)),
sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
size_array[index] = (bytes / Math.pow(1024, i)).toFixed(2) * 1 + ' ' + sizes[i];
total ++;
if(total === entries.length){
filesReady();
}
});
});
}
function filesReady(){
for(var i = 0; i < entries.length; i++){
entries[i] <-- your file
size_array[i] <-- its size
}
}