1
파일을 캐시 디렉토리에 저장하기 전에 장치에서 사용할 수있는 공간 (특히 캐시 디렉토리가있는 공간)을 알고 싶습니다. 어떻게 안드로이드와 이오스에 이렇게? 델파이 베를린에있어.android/ios에서 사용 가능한 디스크 공간을 확인하는 방법은 무엇입니까?
파일을 캐시 디렉토리에 저장하기 전에 장치에서 사용할 수있는 공간 (특히 캐시 디렉토리가있는 공간)을 알고 싶습니다. 어떻게 안드로이드와 이오스에 이렇게? 델파이 베를린에있어.android/ios에서 사용 가능한 디스크 공간을 확인하는 방법은 무엇입니까?
좋아, 여기에 모두가 플랫폼에 대한 솔루션입니다 : 각 OS에 대한 플랫폼 별 코드를 구현해야 할거야
{$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에 대해 수행하는 RTL 기능은 없습니다. 안드로이드에 대한 예제가 있는데 (http://stackoverflow.com/q/4171173/62576) 델파이 코드가 아닙니다. –