1. ホーム
  2. iphone

[解決済み] iPhone/iPadのディスクの空き容量を確認する方法を教えてください。

2022-04-28 16:30:11

質問

iPhone/iPadデバイスのディスクの空き容量をプログラムで検出する、より良い方法を探しています。

現在、私はNSFileManagerを使用してディスクスペースを検出しています。以下は、私のために仕事をするコードのスニペットです。

-(unsigned)getFreeDiskspacePrivate {
NSDictionary *atDict = [[NSFileManager defaultManager] attributesOfFileSystemForPath:@"/" error:NULL];
unsigned freeSpace = [[atDict objectForKey:NSFileSystemFreeSize] unsignedIntValue];
NSLog(@"%s - Free Diskspace: %u bytes - %u MiB", __PRETTY_FUNCTION__, freeSpace, (freeSpace/1024)/1024);

return freeSpace;
}



上記のスニペットで正しいですか?または、使用可能な/無料のディスクスペースの合計を知るためのより良い方法があります。

ディスクの空き容量が少ない場合に、アプリケーションが同期を実行しないようにする必要があるため、ディスクの空き容量の合計を検出する必要があります。

どのように解決するのですか?

アップデイト : この回答からかなりの時間が経過し、新しいメソッド/APIが追加されたため、Swiftなどについては以下の更新された回答を確認してください。



オリジナルの回答 : 私は以下の解決策でうまくいくことがわかりました。

-(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 = %ld", [error domain], (long)[error code]);
    }  

    return totalFreeSpace;
}

デバイスがマシンに接続されているときにiTunesが表示するサイズと全く同じものを返してくれるのです。