1
ファイルをキャッシュディレクトリに保存する前に、デバイス上で使用可能な容量(特に、キャッシュディレクトリがある場所で使用可能な容量)を知りたい。どのようにアンドロイドとイオスでこれを行うには?私はデルファイのベルリンです。android/iosで利用可能なディスク容量を知るには?
ファイルをキャッシュディレクトリに保存する前に、デバイス上で使用可能な容量(特に、キャッシュディレクトリがある場所で使用可能な容量)を知りたい。どのようにアンドロイドとイオスでこれを行うには?私はデルファイのベルリンです。android/iosで利用可能なディスク容量を知るには?
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}
あなたは、各OSのプラットフォーム固有のコードを実装する必要があるとしています。ターゲットOSごとにRTL機能はありません。 Android [ここ](http://stackoverflow.com/q/4171173/62576)でこれを行う例がありますが、それはDelphiコードではありません。 –