2016-12-17 14 views
1

ファイルをキャッシュディレクトリに保存する前に、デバイス上で使用可能な容量(特に、キャッシュディレクトリがある場所で使用可能な容量)を知りたい。どのようにアンドロイドとイオスでこれを行うには?私はデルファイのベルリンです。android/iosで利用可能なディスク容量を知るには?

+0

あなたは、各OSのプラットフォーム固有のコードを実装する必要があるとしています。ターゲットOSごとにRTL機能はありません。 Android [ここ](http://stackoverflow.com/q/4171173/62576)でこれを行う例がありますが、それはDelphiコードではありません。 –

答えて

1

okが、ここではすべてのplateformのためのソリューションです:

{$IFDEF ANDROID} 
    aStatFS := TJALStatFs.JavaClass.init(StringToJstring(aDir)); 
    if (TJBuild_VERSION.JavaClass.SDK_INT < 18 {Android 4.3 - JELLY_BEAN_MR2}) then aTmpAvailableSpace := aStatFS.getBlockSize * aStatFS.getAvailableBlocks 
    else aTmpAvailableSpace := aStatFS.getAvailableBytes; 
    aStatFS := nil; 
    {$ELSEIF defined(IOS) or defined(_MACOS)} 
    aFileManager := TNSFileManager.Wrap(TNSFileManager.OCClass.defaultManager); 
    aDict := aFileManager.attributesOfFileSystemForPath(StrToNSStr(aDir), nil); 
    if aDict = nil then aTmpAvailableSpace := 0 
    else begin 
    aPointer := aDict.objectForKey((CocoaNSStringConst(FoundationFwk, 'NSFileSystemFreeSize') as ILocalObject).GetObjectID); 
    if Assigned(aPointer) then aTmpAvailableSpace := TNSNumber.Wrap(aPointer).unsignedLongLongValue 
    else aTmpAvailableSpace := 0; 
    end; 
    {$ELSEIF defined(MSWINDOWS)} 
    aDiskDrive := ALupperCaseU(AlStringReplaceU(ExtractFileDrive(aDir), ':', '', [])); 
    if length(aDiskDrive) = 1 then aTmpAvailableSpace := DiskFree(ord(aDiskDrive[low(aDiskDrive)]) - $40) 
    else aTmpAvailableSpace := 0; 
    {$ENDIF} 
関連する問題