Cocoaでファイルサイズを適切に取得してMB、GBに変換する方法は?
Cocoaは初めてです。フォルダーファイルのサイズを適切に取得しようとしています。 1 GB未満の場合はMBで表示し、GBで表示します。
表示する方法は、ポイントの後に1つの数字で丸められます。
例5.5 MB1000を超える場合>1.1 GB
私はこれを使用しようとしています
unsigned long long size= ([[[NSFileManager defaultManager] attributesOfItemAtPath:fullPath error:nil] fileSize]);
しかし、私が望むように、数値を適切に変換して表示することはできません。
ありがとう。
ファイルサイズをMBに変換するには、Gbは以下の関数を使用します
- (id)transformedValue:(id)value
{
double convertedValue = [value doubleValue];
int multiplyFactor = 0;
NSArray *tokens = @[@"bytes",@"KB",@"MB",@"GB",@"TB",@“PB”, @“EB”, @“ZB”, @“YB”];
while (convertedValue > 1024) {
convertedValue /= 1024;
multiplyFactor++;
}
return [NSString stringWithFormat:@"%4.2f %@",convertedValue, tokens[multiplyFactor]];
}
編集:
NSByteCountFormatter クラスを使用することもできます。 iOS 6.0/OS X v10.8以降で利用可能です。
[NSByteCountFormatter stringFromByteCount:1999 countStyle:NSByteCountFormatterCountStyleFile];
CountStyleでは、NSByteCountFormatterCountStyleFile
、NSByteCountFormatterCountStyleMemory
、NSByteCountFormatterCountStyleDecimal
、またはNSByteCountFormatterCountStyleBinary
を使用できます。
NSByteCountFormatterCountStyleFile:ファイルまたはストレージのバイト数の表示を指定します。これの実際の動作はプラットフォーム固有です。 OS X 10.8では、これは10進数スタイルを使用しますが、時間の経過とともに変化する可能性があります。
NSByteCountFormatterCountStyleMemory:メモリのバイト数の表示を指定します。これの実際の動作はプラットフォーム固有です。 OS X 10.8では、これはバイナリスタイルを使用しますが、時間の経過とともに変化する可能性があります。
NSByteCountFormatterCountStyleDecimal:KBのバイト数を明示的に指定します。1000バイトは1 KBとして表示されます
NSByteCountFormatterCountStyleBinary:KBのバイト数を明示的に指定します。1024バイトは1 KBとして表示されます
OS X 10.8またはiOS 6をターゲットにしている場合、 NSByteCountFormatter を使用できます。
私はあなたの例を次のように書きます:
NSError *error = nil;
NSDictionary *attribs = [[NSFileManager defaultManager] attributesOfItemAtPath:path error:&error];
if (attribs) {
NSString *string = [NSByteCountFormatter stringFromByteCount:[attribs fileSize] countStyle:NSByteCountFormatterCountStyleFile];
NSLog(@"%@", string);
}