actionscript-3 - 在 Flex/AIR : Is it possible to detect the size of a removable volume?

标签 actionscript-3 apache-flex air

我正在 Flex 上的 AS3 中编写一个应用程序,该应用程序使用 USB 可移动存储 - SD 卡 - 我需要在进度条中显示其上的可用空间。

使用以下方法获取驱动器上的可用空间非常简单:
flash.filesystem.storageVolume.rootDirectory().spaceAvailable
..但是要以图形方式显示可用空间,我需要知道驱动器的总大小,但无论如何我都找不到获取该信息的方法。

目前,我已经根据可用空间粗略地猜测大小,但这显然远非理想。

我已经搜索了 Adob​​e 提供的大量文档并在谷歌上搜索,直到我的手指疼痛,但没有运气。

我猜这在标准框架中可能是不可能的,并且可能需要编写自定义的 Native 扩展 - 请告诉我我错了 :)

最佳答案

我认为唯一可能的方法是递归扫描目录,这可能会为复杂的文件系统消耗大量时间。

import flash.filesystem.File;
import flash.system.Capabilities;

private function getDrives():void
{
     var os:String = Capabilities.os.substr(0, 3).toLowerCase();
     var currentDrives:Array = (os=="mac") ? new File('/Volumes/').getDirectoryListing() : File.getRootDirectories() ;
     for each(var file:File in currentDrives){
         trace ("Drive: " + file.name + " Size: " + file.size);
     }
}

或者,另一种方法:
import flash.filesystem.StorageVolume;

var volumes:Vector.<StorageVolume> = StorageVolumeInfo.storageVolumeInfo.getStorageVolumes();
for each (var volume:StorageVolume in volumes)
{
    // use isRemovable property for USB:
    if (volume.isRemovable && volume.isWritable)
        trace("Drive: " + volume.drive + " Size: " + volume.rootDirectory.size);
}

然后,使用如下函数递归扫描:
public function getDirectorySize(path:Array):Number
{
    var size:Number = new Number();
    for (var i:int = 0; i < path.length; i++)
    {
        if (File(path[i]).isDirectory)
            size += getDirectorySize(File(path[i]).getDirectoryListing());
        else
            size += File(path[i]).size;
    }
    return size;
}

关于actionscript-3 - 在 Flex/AIR : Is it possible to detect the size of a removable volume?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9998013/

相关文章:

apache-flex - 如何在 flex 中用省略号 (...) 截断文本?

flash - 在Flex移动应用程序中处理多个音频流

apache-flex - Flex 图形 Assets : SWF or SWC?

apache-flex - Actionscript/Flex 中的 XML 作为 XMLNode

java - 适用于 Android 的 Adob​​e AIR 打包

facebook - 在 AS3 中加载我的个人资料图片时出现问题

apache-flex - 我无法将自定义事件从一个模块分派(dispatch)到另一个模块,因为它给出了 TypeError : Error #1034: Type Coercion failed:

flash - 由于影片剪辑重叠导致的 AS3 MOUSE_OVER 问题

actionscript-3 - 我可以在 Actionscript 的 SQLite 查询中一次创建多个表吗?

apache-flex - Flex中数据管理的基本原理