如何获取文件夹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。我不知道什么是错的。
答案 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;
}
修改强>
假设您在模拟器中运行此操作,Finder可能会报告文件块对这些字节的使用情况。这些块必然大于文件数据本身。阅读HFS +系统以了解块:http://en.wikipedia.org/wiki/HFS_Plus
我不确定iPhone上使用了什么文件系统,或者设备上的文件块大小是什么,所以虽然字节总数相同,但Simulator和设备之间的实际磁盘使用量可能不同
答案 1 :(得分:1)
你真的是/ Library / Cache,或者你的意思是〜/ Library / Cache(应用程序的缓存目录)。你通常无法控制前者,所以我认为你的意思是后者。
使用NSFileManager的-enumeratorAtPath:遍历目录并使用-attributesOfItemAtPath:error:来获取fileSize。我建议在后台线程上慢慢执行此操作以避免阻止您的应用。