как я получаю размер папки 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 (не знайте байты или КБ), и я регистрируюсь в средстве поиска, это показывает мне размер папки 168 КБ, которые я не знаю что случилось.
Что-то вроде следующего должно помочь вам начать:
- (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;
}
РЕДАКТИРОВАТЬ
Возвращаемое значение будет в байтах: ср. 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 или какой размер файлового блока будет на устройстве, поэтому, хотя общее количество байтов будет одинаковым, фактическое использование диска может отличаться между симулятором и устройством.
Вы действительно имеете в виду / Library / Cache или ~ / Library / Cache (каталог кеша приложения). Обычно вы не контролируете первое, поэтому я предполагаю, что вы имеете в виду второе.
Используйте NSFileManager -enumeratorAtPath: для обхода каталога и -attributesOfItemAtPath: error: для получения размера файла. Я рекомендую делать это медленно в фоновом потоке, чтобы избежать блокировки вашего приложения.