我正在 Flex 上的 AS3 中编写一个应用程序,该应用程序使用 USB 可移动存储 - SD 卡 - 我需要在进度条中显示其上的可用空间。
使用以下方法获取驱动器上的可用空间非常简单:flash.filesystem.storageVolume.rootDirectory().spaceAvailable
..但是要以图形方式显示可用空间,我需要知道驱动器的总大小,但无论如何我都找不到获取该信息的方法。
目前,我已经根据可用空间粗略地猜测大小,但这显然远非理想。
我已经搜索了 Adobe 提供的大量文档并在谷歌上搜索,直到我的手指疼痛,但没有运气。
我猜这在标准框架中可能是不可能的,并且可能需要编写自定义的 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/