2012-05-15 52 views
3

是否存在用於在ObjectiveC中格式化文件大小的方法?或者,你可能會建議我一些庫/源代碼/等。objective-c文件大小格式化程序

我的意思是你應該顯示像這樣的一些文件的大小取決於給定大小:

  • 1234 KB
  • 1,2 MB
  • 等。

在此先感謝

+1

將此邏輯轉換爲Objective-C,應該足夠簡單http://stackoverflow.com/questions/1242266/converting-bytes-to-gb-in-c – Joe

+0

你想顯示單個值,還是你希望把它放在表格視圖中以顯示多個值? – rdelmar

+0

沒有內置可可。 Joe給出的鏈接很容易移植到ObjC。 – abarnert

回答

0

獲取文件大小,然後計算它是在字節或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 

檢查this link

+0

OP明確瞭解轉換如何工作,但正在尋找一個能夠進行必要轉換的庫/代碼片段。 – Joe

+0

如果文件大小可以計算,你只需要除以1024 – zahreelay

0

下面是一些代碼,我發現躺在身邊。不是非常有效,並且可能會更好附着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 !!!!! 
6

這一個相當優雅解決了這個問題:

[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起可用。