我正在使用USB移动存储 - SD卡在AS3上编写一个应用程序,我需要在进度条中显示它上面的可用空间。
使用以下方法获取驱动器上的可用空间非常简单:
flash.filesystem.storageVolume.rootDirectory().spaceAvailable
..但是为了以图形方式显示可用空间,我需要知道驱动器的总大小,但无论如何我都找不到这些信息。
目前,我已经根据自由空间粗略地猜测了这个尺寸,但这显然远非理想。
我已经搜索了Adobe提供的大量文档并用Google搜索,直到我的手指疼痛,但没有运气。
我猜这可能无法使用标准框架,并且可能需要编写自定义的本地扩展 - 请告诉我我错了:)
答案 0 :(得分:4)
我认为唯一可行的方法是递归扫描目录,这可能会占用复杂文件系统的大量时间。
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;
}