Objective Cでファイルサイズをフォーマットするための組み込みメソッドはありますか? または、いくつかのライブラリ/ソースコード/などを提案していただけますか?
つまり、特定のサイズに応じて、次のように表示されるファイルサイズがあるということです。
- 1234キロバイト
- 1.2メガバイト
- 等..
前もって感謝します
Objective Cでファイルサイズをフォーマットするための組み込みメソッドはありますか? または、いくつかのライブラリ/ソースコード/などを提案していただけますか?
つまり、特定のサイズに応じて、次のように表示されるファイルサイズがあるということです。
前もって感謝します
これは問題を非常にエレガントに解決します:
[NSByteCountFormatter stringFromByteCount:countStyle:]
使用例:
long long fileSize = 14378165;
NSString *displayFileSize = [NSByteCountFormatter stringFromByteCount:fileSize
countStyle:NSByteCountFormatterCountStyleFile];
NSLog(@"Display file size: %@", displayFileSize);
fileSize = 50291;
displayFileSize = [NSByteCountFormatter stringFromByteCount:fileSize
countStyle:NSByteCountFormatterCountStyleFile];
NSLog(@"Display file size: %@", displayFileSize);
ログ出力:
表示ファイルサイズ:14.4MB
表示ファイルサイズ:50KB
出力は、デバイスの地域設定に従って適切にフォーマットされます。
iOS 6.0 および OS X 10.8 以降で利用できます。
ここに私が横たわっているのを見つけたいくつかのコードがあります。それほど効率的ではなく、おそらく NSNumber よりも NSNumberFormatter のカテゴリに関連付けられている方が適切ですが、うまくいくようです
@interface NSNumber (FormatKibi)
- (NSString *)formatKibi;
@end
@implementation NSNumber (FormatKibi)
- (NSString *)formatKibi {
double value = [self doubleValue];
static const char suffixes[] = { 0, 'k', 'm', 'g', 't' };
int suffix = 0;
if (value <= 10000)
return [[NSString stringWithFormat:@"%5f", value]
substringToIndex:5];
while (value > 9999) {
value /= 1024.0;
++suffix;
if (suffix >= sizeof(suffixes)) return @"!!!!!";
}
return [[[NSString stringWithFormat:@"%4f", value]
substringToIndex:4]
stringByAppendingFormat:@"%c", suffixes[suffix]];
}
@end
私はこれでそれをテストしました:
int main(int argc, char *argv[]) {
for (int i = 1; i != argc; ++i) {
NSNumber *n = [NSNumber numberWithInteger:
[[NSString stringWithUTF8String:argv[i]]
integerValue]];
printf("%s ", [[n formatKibi] UTF8String]);
}
printf("\n");
return 0;
}
それで:
$ ./sizeformat 1 12 123 1234 12345 123456 1234567 12345678 1234567890 123456789012 12345678901234 1234567890123456 123456789012345678
1.000 12.00 123.0 1234. 12.0k 120.k 1205k 11.7m 1177m 114.g 11.2t 1122t !!!!!
ファイルサイズを取得し、バイト、kb、mb のいずれであるかを計算します
NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:URL error:&attributesError];
NSNumber *fileSizeNumber = [fileAttributes objectForKey:NSFileSize];
long long fileSize = [fileSizeNumber longLongValue];
Then conversion table
1 byte = 8 bits
1 KiB = 1,024 bytes
1 MiB = 1024 kb
1 GiB = 1024 mb
このリンクを確認してください