在 Objective C 中是否有用于格式化文件大小的内置方法?或者您可以建议我一些库/源代码/等?
我的意思是你有一些文件大小应该根据给定的大小显示如下:
- 1234 KB
- 1,2 兆
- ETC..
提前致谢
在 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.4 MB
显示文件大小:50 KB
输出将根据设备的区域设置正确格式化。
自 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
检查这个链接