如何知道android / ios上的可用磁盘空间?

时间:2016-12-17 17:54:12

标签: android ios delphi firemonkey

在将文件保存到缓存目录之前我想知道设备上有多少可用空间(特别是缓存目录所在的可用空间)。如何在Android和ios上做到这一点?我在德尔福柏林。

1 个答案:

答案 0 :(得分:3)

好的,这是所有平台的解决方案(取自https://github.com/Zeus64/alcinoe):

  {$IFDEF ANDROID}
  aStatFS := TJStatFs.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}