【问题标题】:iOS recursive folder sizeiOS递归文件夹大小
【发布时间】:2012-05-29 12:31:25
【问题描述】:

我将文件存储在本地文档目录中,由文件夹分隔。 有没有一种简单的方法可以获取 iPhone 上文档目录和所有子目录内容的文件大小?

我可以手动迭代文件夹并不断增加文件大小,但我希望有一些更清洁、更高效的东西。

谢谢!

【问题讨论】:

  • 计算一个目录在磁盘上占用的大小实际上有点复杂。了解如何在 this answer 中回答类似问题。

标签: iphone objective-c ios file size


【解决方案1】:

您可以递归地遍历所有文件夹并获取大小。 像这样:

+(NSUInteger)getDirectoryFileSize:(NSURL *)directoryUrl
{
    NSUInteger result = 0;
    NSArray *properties = [NSArray arrayWithObjects: NSURLLocalizedNameKey,
                           NSURLCreationDateKey, NSURLLocalizedTypeDescriptionKey, nil];

    NSArray *array = [[NSFileManager defaultManager]
                      contentsOfDirectoryAtURL:directoryUrl
                      includingPropertiesForKeys:properties
                      options:(NSDirectoryEnumerationSkipsHiddenFiles)
                      error:nil];

    for (NSURL *fileSystemItem in array) {
        BOOL directory = NO;
        [[NSFileManager defaultManager] fileExistsAtPath:[fileSystemItem path] isDirectory:&directory];
        if (!directory) {
            result += [[[[NSFileManager defaultManager] attributesOfItemAtPath:[fileSystemItem path] error:nil] objectForKey:NSFileSize] unsignedIntegerValue];
        }
        else {
            result += [CacheManager getDirectoryFileSize:fileSystemItem];
        }
    }

    return result;
}

【讨论】:

  • 这个'CacheManager'是什么,我不认为它是一个苹果库?
  • 只需将“CacheManager”替换为您自己的包含此方法文件的名称
【解决方案2】:

方法和效率因 iOS 版本而异。对于 iOS 4.0 及更高版本,您可以在 NSFileManager 上创建一个类别,如下所示:

- (unsigned long long)contentSizeOfDirectoryAtURL:(NSURL *)directoryURL
{
    unsigned long long contentSize = 0;
    NSDirectoryEnumerator *enumerator = [self enumeratorAtURL:directoryURL includingPropertiesForKeys:[NSArray arrayWithObject:NSURLFileSizeKey] options:NSDirectoryEnumerationSkipsHiddenFiles errorHandler:NULL];
    NSNumber *value = nil;
    for (NSURL *itemURL in enumerator) {
        if ([itemURL getResourceValue:&value forKey:NSURLFileSizeKey error:NULL]) {
            contentSize += value.unsignedLongLongValue;
        }
    }
    return contentSize;
}

【讨论】:

    猜你喜欢
    • 2016-03-05
    • 2018-12-17
    • 2012-06-16
    • 2020-06-01
    • 2018-10-10
    • 2018-10-10
    • 1970-01-01
    • 2020-06-23
    • 2020-01-13
    相关资源
    最近更新 更多