是否存在用於在ObjectiveC中格式化文件大小的方法?或者,你可能會建議我一些庫/源代碼/等。objective-c文件大小格式化程序
我的意思是你應該顯示像這樣的一些文件的大小取決於給定大小:
- 1234 KB
- 1,2 MB
- 等。
在此先感謝
是否存在用於在ObjectiveC中格式化文件大小的方法?或者,你可能會建議我一些庫/源代碼/等。objective-c文件大小格式化程序
我的意思是你應該顯示像這樣的一些文件的大小取決於給定大小:
在此先感謝
獲取文件大小,然後計算它是在字節或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
下面是一些代碼,我發現躺在身邊。不是非常有效,並且可能會更好附着NSNumberFormatter比的NSNumber類別,等等,但它似乎工作
@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 123456789
1.000 12.00 123.0 1234. 12.0k 120.k 1205k 11.7m 1177m 114.g 11.2t 1122t !!!!!
這一個相當優雅解決了這個問題:
[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起可用。
將此邏輯轉換爲Objective-C,應該足夠簡單http://stackoverflow.com/questions/1242266/converting-bytes-to-gb-in-c – Joe
你想顯示單個值,還是你希望把它放在表格視圖中以顯示多個值? – rdelmar
沒有內置可可。 Joe給出的鏈接很容易移植到ObjC。 – abarnert