如何知道android / ios上的可用磁盘空间?
在将文件保存到缓存目录之前,我想知道设备上有多少可用空间(特别是缓存目录所在的可用空间)。 如何在android和ios上做到这一点? 我在德尔斐柏林。
好的,这是所有平台的解决方案(取自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}