2012-04-03 3 views
4

私は、USBリムーバブルストレージ(SDカード)を使用するFlexのAS3にアプリケーションを書いています。利用可能なスペースをプログレスバーに表示する必要があります。 「Flex/AIR:リムーバブルボリュームのサイズを検出できますか?

flash.filesystem.storageVolume.rootDirectory().spaceAvailable

..butグラフィカルに、私はドライブの合計サイズを知っておく必要があり、空き領域を表示するために、私は次のことができます。

ドライブの空き容量を取得するだけでは十分では使用して簡単ですとにかくその情報を得るのを見つける。

今のところ、私は自由空間に基づいておおよそのサイズを推測することに頼っていましたが、これは明らかに理想から遠いです。

アドビが提供している膨大な文書を精査したところ、私の指が痛いが、幸運はありませんでした。

私はこれが標準のフレームワークでは可能ではないかもしれないと書き込まれるカスタムネイティブ拡張子が必要な場合があります推測している - 私が間違って私に教えてください:)

答えて

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

ありがとうございます。私はファイルシステムをスキャンして "使用された"スペース値を取得することを検討しました..絶対的に正確でない場合は関係なく、近似はうまくいくでしょう。私はそれを試し、それがどのように機能するかを教えてくれるでしょう。再度、感謝します! – Carl

+0

getDirectoryListingAsyncを使用して、非同期でスキャンを再帰的に行うことができます。申し訳ありませんが、これはAdobeの優れた機能リクエストです。 –

+0

ディスク全体をスキャンするのはかなり時間がかかると思いますが、OSをチェックして、コマンドラインツールを使って必要な情報を取得する方が良いでしょう。 Windowsの場合、これを使うことができます:dir C:\ | find/i "bytes free"> drivespacefree.txt、* nixシステムの場合はdf http://www.cyberciti.biz/faq/check-free-space/ * nixのbashをネイティブプロセスとして使用してコマンドラインツールを実行し、cmd.exeをWindowsシステムのC:\ windows \ system32 \に使用することができます。 – shaunhusain

関連する問題