2012-04-06 32 views
0

我按照http://kdbdallas.com/2008/12/27/maciphone-show-availble-useable-diskspace/how do i find out iphone Disk Space? 檢測可用磁盤空間。但是,似乎結果不正確在檢測到可用磁盤空間的同時獲取了錯誤的值

我在iphone 4上測試ios 4.2.1。

的設置, 容量爲29.1g的 可用性是24.29

我想要得到24.2 G值。所以我跟着我上面提到的教程。

int main(int argc, char *argv[]) { 
     ..... 

     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSLog(@"path %@", paths); 

     struct statfs tStats; 
     statfs([[paths lastObject] UTF8String], &tStats); 

     NSString *sizeType; 

     float total_space = (float)(tStats.f_blocks * tStats.f_bsize); 
     NSLog(@"total space: %f", total_space); 
     NSLog(@"total space: %@", convertUnit(total_space)); 

     float free_space = (float)(tStats.f_bfree * tStats.f_bsize); 
     NSLog(@"free space: %f", free_space); 
     NSLog(@"free space: %@", convertUnit(free_space)); 

     float free_space2 = (float)(tStats.f_bavail * tStats.f_bsize);  
     NSLog(@"free blocks avail to non-superuser: %f", free_space2); 
     NSLog(@"free blocks avail to non-superuser: %@", convertUnit(free_space2)); 

     uint32_t block_size = (tStats.f_bsize);  
     NSLog(@"block size: %d", block_size); 
     NSLog(@"block size: %@", convertUnit(block_size)); 
     ..... 
}  

NSString* convertUnit (float value) { 
    NSString *sizeType; 
    if (value > 1024) 
    { 
     //Kilobytes 
     value = value/1024; 

     sizeType = @" KB"; 
    } 

    if (value > 1024) 
    { 
     //Megabytes 
     value = value/1024; 

     sizeType = @" MB"; 
    } 

    if (value > 1024) 
    { 
     //Gigabytes 
     value = value/1024; 

     sizeType = @" GB"; 
    } 

    return [[@"Available Disk Space: " stringByAppendingFormat:@"%.2f", value] stringByAppendingString:sizeType]; 

} 

結果:做有關iPhone的文件系統的多個搜索

total space: 17363854862722269184.000000 
total space: Available Disk Space: 16171350016.00 GB 

free space: 17743592094095638528.000000 
free space: Available Disk Space: 16525007872.00 GB 

free blocks avail to non-superuser: 17432956969504735232.00000 
free blocks avail to non-superuser: Available Disk Space: 16235706368.00 GB 

block size: 803203484 
block size: Available Disk Space: 765.99 MB 

回答

0

後,我發現iPhone有2個分區:一個是操作系統,另一個用於用戶數據。我得到的值是操作系統分區的屬性。所以我將路徑更改爲'private/var',這是數據分區的路徑。因此,我獲得了可用磁盤空間的正確值。

0

你的總可用空間在MB

試試這個代碼

-(uint64_t)getFreeDiskspace { 

    uint64_t totalSpace = 0; 
    uint64_t totalFreeSpace = 0; 
    NSError *error = nil; 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); 
    NSDictionary *dictionary = [[NSFileManager defaultManager] attributesOfFileSystemForPath:[paths lastObject] error: &error]; 

    if (dictionary) { 
     NSNumber *fileSystemSizeInBytes = [dictionary objectForKey: NSFileSystemSize]; 
     NSNumber *freeFileSystemSizeInBytes = [dictionary objectForKey:NSFileSystemFreeSize]; 
     totalSpace = [fileSystemSizeInBytes unsignedLongLongValue]; 
     totalFreeSpace = [freeFileSystemSizeInBytes unsignedLongLongValue]; 
     NSLog(@"Memory Capacity of %llu MiB with %llu MiB Free memory available.", ((totalSpace/1024ll)/1024ll), ((totalFreeSpace/1024ll)/1024ll)); 
    } else { 
     NSLog(@"Error Obtaining System Memory Info: Domain = %@, Code = %@", [error domain], [error code]); 
    } 

    return ((totalFreeSpace/1024ll)/1024ll); 
} 

這會給

相關問題