【问题标题】:iOS - Get sum of filesize in directoryiOS - 获取目录中文件大小的总和
【发布时间】:2012-03-08 01:37:53
【问题描述】:

我有以下代码用于在设备内存中缓存从 Flickr 加载的照片:

NSURL *urlForPhoto = [FlickrFetcher urlForPhoto:self.photo format:FlickrPhotoFormatLarge];
NSString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *imagePath = [rootPath stringByAppendingString:[self.photo objectForKey:FLICKR_PHOTO_ID]];
NSData *dataForPhoto;
NSError *error = nil;
if ([[NSFileManager defaultManager] fileExistsAtPath:imagePath]) {
    dataForPhoto = [NSData dataWithContentsOfFile:imagePath];
} else {
    dataForPhoto = [NSData dataWithContentsOfURL:urlForPhoto];
    [dataForPhoto writeToFile:imagePath atomically:YES];
}

我想将其限制为 10MB,然后如果达到限制以删除缓存中最旧的照片,我如何获取我保存的所有文件的总大小并检查哪个是最旧的?

【问题讨论】:

  • 是的,我必须把评论加长,这样我才能回答。
  • 计算一个目录在磁盘上占用的大小实际上有点复杂。了解如何在 this answer 中回答类似问题。

标签: objective-c ios ios5 directory nsfilemanager


【解决方案1】:

你可以像这样获取文件的大小

NSError *attributesError = nil;

    NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:URL error:&attributesError];

    int fileSize = [fileAttributes fileSize];

所以你也许可以遍历文件夹中的所有文件并将文件大小相加...不确定是否有直接的方法来获取目录大小,还有这篇 SO 帖子也在讨论这个问题,你可以找到一个解决方案here

要查找文件的创建日期,您可以这样做

NSString *path = @"";
    NSDictionary* fileAttribs = [[NSFileManager defaultManager] attributesOfItemAtPath:path error:nil];
    NSDate *result = [fileAttribs valueForKey:NSFileCreationDate]; //or NSFileModificationDate

希望对你有帮助

【讨论】:

  • 真棒丹尼尔,还有一件事,如何确定检查目录是否存在?因为如果文档目录不存在,我会在子目录中创建一个子目录
  • [NSFileManager defaultManager] itemExistsAtPath 应该可以解决问题
  • 实际上是 fileExistsAtPath,Daniel。现在,你能再回答一件事吗?如果我获取属性并在其上获取 NSFileSize 对象,我会得到一个小数字,如果我在一个文件上调用它,我会得到一个大数字(我假设都是字节),没有得到文件大小目录给我其中所有文件的总数?
  • @8vius 不确定,因为我从未尝试过,但根据您的评论,我猜不是?
  • 看起来不像,所以为了确保我只是添加所有文件,这很奇怪,如果你查询目录的大小,它的大小应该是总大小其内容
猜你喜欢
  • 1970-01-01
  • 2021-02-11
  • 2012-05-20
  • 1970-01-01
  • 1970-01-01
  • 2010-11-10
  • 1970-01-01
  • 2018-10-22
  • 2021-08-29
相关资源
最近更新 更多