加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

actionscript-3 – 在Flex / AIR中:是否可以检测可移动卷的大小

发布时间:2020-12-15 01:46:04 所属栏目:百科 来源:网络整理
导读:我正在使用USB移动存储 – SD卡在AS3上编写AS3应用程序 – 我需要在进度条中显示它上面的可用空间. 使用以下方法获得驱动器上的可用空间非常简单: flash.filesystem.storageVolume.rootDirectory().spaceAvailable将 ..但是为了以图形方式显示自由空间,我需
我正在使用USB移动存储 – SD卡在AS3上编写AS3应用程序 – 我需要在进度条中显示它上面的可用空间.

使用以下方法获得驱动器上的可用空间非常简单:

flash.filesystem.storageVolume.rootDirectory().spaceAvailable将

..但是为了以图形方式显示自由空间,我需要知道驱动器的总大小,我无法找到获取该信息.

就目前而言,我已经大致根据自由空间来猜测尺寸,但这显然远非理想.

我已经搜索了Adobe提供的大量文档并用Google搜索,直到我的手指疼痛,但没有运气.

我猜这可能是不可能的标准框架,可能需要写一个自定义的本地扩展 – 请告诉我,我错了:)

解决方法

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

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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读