iphone中NSCachesDirectory的大小

时间:2010-02-08 20:30:14

标签: iphone caching size

如何获取文件夹NSCachesDirectory的大小,即/ Library / Cache。我想知道这个文件夹的大小,这样我最终可以清除它。

感谢。

编辑:这是我的代码。

NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfItemAtPath:folderPath error:&error];
if (attributes != nil) {

    if (fileSize = [attributes objectForKey:NSFileSize]) {
        NSLog(@"size of :%@ = %qi\n",folderPath, [fileSize unsignedLongLongValue]);
    }

}

当我运行它时,它给我的文件大小768(不知道字节或KB),我检查查找它显示文件夹大小168KB。我不知道什么是错的。

2 个答案:

答案 0 :(得分:11)

以下内容应该有助于您入门:

- (unsigned long long int) cacheFolderSize {
    NSFileManager *_manager = [NSFileManager defaultManager];
    NSArray *_cachePaths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSString *_cacheDirectory = [_cachePaths objectAtIndex:0]; 
    NSArray *_cacheFileList;
    NSEnumerator *_cacheEnumerator;
    NSString *_cacheFilePath;
    unsigned long long int _cacheFolderSize = 0;

    _cacheFileList = [_manager subpathsAtPath:_cacheDirectory];
    _cacheEnumerator = [_cacheFileList objectEnumerator];
    while (_cacheFilePath = [_cacheEnumerator nextObject]) {
        NSDictionary *_cacheFileAttributes = [_manager fileAttributesAtPath:[_cacheDirectory stringByAppendingPathComponent:_cacheFilePath] traverseLink:YES];
        _cacheFolderSize += [_cacheFileAttributes fileSize];
    }

    return _cacheFolderSize;
}

修改

返回的值将以字节为单位:cf。 http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSFileManager_Class/Reference/Reference.html#//apple_ref/doc/c_ref/NSFileSize

假设您在模拟器中运行此操作,Finder可能会报告文件块对这些字节的使用情况。这些块必然大于文件数据本身。阅读HFS +系统以了解块:http://en.wikipedia.org/wiki/HFS_Plus

我不确定iPhone上使用了什么文件系统,或者设备上的文件块大小是什么,所以虽然字节总数相同,但Simulator和设备之间的实际磁盘使用量可能不同

答案 1 :(得分:1)

你真的是/ Library / Cache,或者你的意思是〜/ Library / Cache(应用程序的缓存目录)。你通常无法控制前者,所以我认为你的意思是后者。

使用NSFileManager的-enumeratorAtPath:遍历目录并使用-attributesOfItemAtPath:error:来获取fileSize。我建议在后台线程上慢慢执行此操作以避免阻止您的应用。