FileInfoUtils.m 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. //
  2. // FileInfoUtils.m
  3. // AIIM
  4. //
  5. // Created by qitewei on 2025/5/26.
  6. //
  7. #import "FileInfoUtils.h"
  8. @implementation FileInfoUtils
  9. + (NSString *)getFileNameWithURL:(NSURL *)fileURL {
  10. // 检查URL是否有效
  11. if (![fileURL isFileURL]) {
  12. NSLog(@"Error: The provided URL is not a file URL.");
  13. return nil;
  14. }
  15. // 从URL中获取最后一个路径组件(即文件名)
  16. return [fileURL lastPathComponent];
  17. }
  18. + (NSString *)getFileSizeStringWithURL:(NSURL *)fileURL error:(NSError **)error {
  19. // 检查URL是否有效
  20. if (![fileURL isFileURL]) {
  21. if (error) {
  22. *error = [NSError errorWithDomain:@"FileInfoErrorDomain"
  23. code:1001
  24. userInfo:@{NSLocalizedDescriptionKey: @"The provided URL is not a file URL."}];
  25. }
  26. return nil;
  27. }
  28. // 获取文件属性
  29. NSDictionary<NSFileAttributeKey, id> *attributes;
  30. NSError *attrError = nil;
  31. attributes = [fileURL resourceValuesForKeys:@[NSURLFileSizeKey] error:&attrError];
  32. if (attrError) {
  33. if (error) {
  34. *error = attrError;
  35. }
  36. NSLog(@"Error getting file attributes: %@", attrError.localizedDescription);
  37. return nil;
  38. }
  39. // 从属性中获取文件大小
  40. NSNumber *fileSizeNumber = attributes[NSURLFileSizeKey];
  41. unsigned long long fileSize = [fileSizeNumber unsignedLongLongValue];
  42. // 格式化文件大小为易读的字符串
  43. return [self formatFileSize:fileSize];
  44. }
  45. /**
  46. * 根据本地文件URL获取文件字节大小
  47. * @param fileURL 本地文件的URL
  48. * @param error 错误信息输出
  49. * @return 文件字节大小
  50. */
  51. + (NSInteger )getFileSizeWithURL:(NSURL *)fileURL error:(NSError **)error{
  52. if (![fileURL isFileURL]) {
  53. if (error) {
  54. *error = [NSError errorWithDomain:@"FileInfoErrorDomain"
  55. code:1001
  56. userInfo:@{NSLocalizedDescriptionKey: @"The provided URL is not a file URL."}];
  57. }
  58. return 0;
  59. }
  60. // 获取文件属性
  61. NSDictionary<NSFileAttributeKey, id> *attributes;
  62. NSError *attrError = nil;
  63. attributes = [fileURL resourceValuesForKeys:@[NSURLFileSizeKey] error:&attrError];
  64. if (attrError) {
  65. if (error) {
  66. *error = attrError;
  67. }
  68. NSLog(@"Error getting file attributes: %@", attrError.localizedDescription);
  69. return 0;
  70. }
  71. // 从属性中获取文件大小
  72. NSNumber *fileSizeNumber = attributes[NSURLFileSizeKey];
  73. unsigned long long fileSize = [fileSizeNumber unsignedLongLongValue];
  74. // 格式化文件大小为易读的字符串
  75. return fileSize;
  76. }
  77. + (BOOL)isFileGreaterThan100MB:(NSURL *)fileURL error:(NSError **)error {
  78. // 定义200MB的字节数
  79. const unsigned long long oneHundredMB = 2024 * 1024 * 1024; // 100MB = 100*1024*1024 bytes
  80. // 检查URL是否有效
  81. if (![fileURL isFileURL]) {
  82. if (error) {
  83. *error = [NSError errorWithDomain:@"FileInfoErrorDomain"
  84. code:1001
  85. userInfo:@{NSLocalizedDescriptionKey: @"The provided URL is not a file URL."}];
  86. }
  87. return NO;
  88. }
  89. // 获取文件属性
  90. NSDictionary<NSFileAttributeKey, id> *attributes;
  91. NSError *attrError = nil;
  92. attributes = [fileURL resourceValuesForKeys:@[NSURLFileSizeKey] error:&attrError];
  93. if (attrError) {
  94. if (error) {
  95. *error = attrError;
  96. }
  97. NSLog(@"Error getting file attributes: %@", attrError.localizedDescription);
  98. return NO;
  99. }
  100. // 从属性中获取文件大小
  101. NSNumber *fileSizeNumber = attributes[NSURLFileSizeKey];
  102. unsigned long long fileSize = [fileSizeNumber unsignedLongLongValue];
  103. // 判断文件大小是否大于100MB
  104. return fileSize > oneHundredMB;
  105. }
  106. /**
  107. * 将文件大小(字节)格式化为易读的字符串
  108. * @param fileSize 文件大小(字节)
  109. * @return 格式化后的字符串(如"2.4 MB"、"56.7 KB")
  110. */
  111. + (NSString *)formatFileSize:(unsigned long long)fileSize {
  112. NSByteCountFormatter *formatter = [[NSByteCountFormatter alloc] init];
  113. formatter.allowedUnits = NSByteCountFormatterUseMB | NSByteCountFormatterUseKB; // 只显示KB和MB
  114. formatter.countStyle = NSByteCountFormatterCountStyleFile;
  115. formatter.includesUnit = YES;
  116. formatter.includesCount = YES;
  117. formatter.allowsNonnumericFormatting = NO;
  118. return [formatter stringFromByteCount:(int64_t)fileSize];
  119. }
  120. @end