簡體   English   中英

獲取磁盤空間屬性NSFileSystem + attributesOfFileSystem與iOS設置應用中的信息不匹配

[英]Getting Disk Space Attributes NSFileSystem +attributesOfFileSystem doesn't match info in iOS Settings App

我正在嘗試使用以下代碼,從本網站上的各種解決方案改編而成,以字節為單位從我的iOS應用程序獲取總/已使用/可用空間。

 - (unsigned long long)totalDiskSpace {

     unsigned long long space = 0;

     NSError *error = nil;

     NSArray<NSString *> *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
     NSDictionary *dict = [[NSFileManager defaultManager] attributesOfFileSystemForPath:paths.lastObject error:&error];

     if (dict) {

         NSNumber *size = dict[NSFileSystemSize];
         space = size.unsignedLongLongValue;

     }

     return space;

 }

 - (unsigned long long)freeDiskSpace {

     unsigned long long space = 0;

     NSError *error = nil;

     NSArray<NSString *> *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
     NSDictionary *dict = [[NSFileManager defaultManager] attributesOfFileSystemForPath:paths.lastObject error:&error];

     if (dict) {

         NSNumber *size = dict[NSFileSystemFreeSize];
         space = size.unsignedLongLongValue;

     }

     return space;
}

問題是,當我將這些值與使用情況在其Settings.app中看到的值進行比較時,它們完全不可用了,我正在256 GB iPhone X上進行測試,而“總”空間值是正確的,但該值因為“自由”空間似乎要少得多。

在我的設備上,我得到的值是255937040384 (〜255GB),但是免費只有175536754688 ,這意味着80400285696使用了8040028569680400285696 )。 但是,在Settings.app中,我的設備僅顯示52.4 GB的使用空間。

有人知道為什么會這樣嗎?

可以使用NSURLresourceValuesForKeys:方法來獲取驅動器的可用空間,而不是使用NSFileManager NSURL在此處提供了三個相關的常量:

  • NSURLVolumeAvailableCapacityKey驅動器上的文字可用空間,應與NSFileManager返回的值相同,

  • NSURLVolumeAvailableCapacityForImportantUsageKey驅動器上的字面可用空間,再加上磁盤上任何“臨時”文件的大小,可以在需要時自動刪除這些文件以為其他事情提供空間,並且:

  • NSURLVolumeAvailableCapacityForOpportunisticUsageKey臨時文件本身可用的空間量,以我的經驗,這通常小於實際的可用空間。

在您的情況下, NSURLVolumeAvailableCapacityForImportantUsageKey可能是Settings.app報告的值,因為從用戶的角度來看,這就是您必須使用的空間量。

同樣,作為一般規則,如果您使用的是帶路徑而不是URL的Apple Objective-C或Swift API,則可能是舊版API。 基於URL的API通常更完整和最新,並且通常應優先於基於路徑的API-在這種情況下,基於路徑的API優先於重要/機會主義概念會導致其缺乏用於讀取這些值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM