ios - 计算文件和数据存储采用IOS7

标签 ios

我正在尝试查找我的 IOS 应用程序文档目录的总大小。我相信这是我在“设置”应用中看到的使用情况下的值(文档和数据,这个值现在是 40MB)。通过使用此方法:

-(int)sizeOfFolder:(NSString *)folderPath
{
NSArray *contents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:folderPath error:nil];
NSEnumerator *contentsEnumurator = [contents objectEnumerator];

NSString *file;
unsigned long long int folderSize = 0;

while (file = [contentsEnumurator nextObject]) {
    NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:[folderPath stringByAppendingPathComponent:file] error:nil];
    folderSize += [[fileAttributes objectForKey:NSFileSize] intValue];
}

//This line will give you formatted size from bytes ....
//NSString *folderSizeStr = [NSByteCountFormatter stringFromByteCount:folderSize countStyle:NSByteCountFormatterCountStyleFile];

NSLog(@"size: %llu", folderSize);

return folderSize;
} 

我总是得到相同的值。这是我传递给方法的路径:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* rootPath = [paths objectAtIndex:0];
int space = [self sizeOfFolder:rootPath];

最佳答案

首先你应该小心文件类型。您应该使用 long long 来计算总大小:

unsigned long long folderSize = 0; // remove int here
// ...
folderSize += [[fileAttributes objectForKey:NSFileSize] longLongValue]; // note longLongValue

接下来你应该跳过目录以获得更准确的结果

if (![fileAttirbutes[NSFileType] equalsToString:NSFileTypeDirectory]) {
    folderSize += ...
}

我建议您查看另一种目录枚举方法。使用 - (NSDirectoryEnumerator *)enumeratorAtURL:(NSURL *)url includingPropertiesForKeys:(NSArray *)keys options:(NSDirectoryEnumerationOptions)mask errorHandler:(BOOL (^)(NSURL *url, NSError *error))handler 将允许您执行更深入的目录枚举并递归列出所有目录内容

unsigned long long count = 0;
NSNumber *value = nil;

for (NSURL *url in [[NSFileManager defaultManager] enumeratorAtURL:directoryURL includingPropertiesForKeys:@[NSURLFileSizeKey] options:0 errorHandler:NULL]) {
    if ([url getResourceValue:&value forKey:NSURLFileSizeKey error:outError]) {
        count += [value longLongValue];
    } else {
        return nil;
    }
}

return @(count);

关于ios - 计算文件和数据存储采用IOS7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21136668/

相关文章:

ios - 在 Apple Enterprise Store 中发布应用程序,它是如何工作的?

ios - UITableView不显示数据

ios - 如何在 Xcode for iOS 中启用 ASLR

iphone - 未安装 MDM 负载的配置描述文件

ios - 另一个应用程序中的设备 token 更改

ios - 在 SWIFT 中的函数链中间等待闭包完成

ios - 将@propertys 添加到核心数据类

ios - 整个模块优化 - 将 pod 中的所有 swift 文件放在主项目中?

ios - iOS 4、iOS 5 和 iOS 6 的推送通知有何不同?

ios - 删除表格 View 中包含数组数据的行