5

Objective Cでファイルサイズをフォーマットするための組み込みメソッドはありますか? または、いくつかのライブラリ/ソースコード/などを提案していただけますか?

つまり、特定のサイズに応じて、次のように表示されるファイルサイズがあるということです。

  • 1234キロバイト
  • 1.2メガバイト
  • 等..

前もって感謝します

4

3 に答える 3

13

これは問題を非常にエレガントに解決します:

[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 以降で利用できます。

于 2014-08-01T10:48:36.907 に答える
0

ここに私が横たわっているのを見つけたいくつかのコードがあります。それほど効率的ではなく、おそらく 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 !!!!!
于 2012-05-15T23:04:29.797 に答える
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

このリンクを確認してください

于 2012-05-15T19:59:19.367 に答える