размер NSCachesDirectory в iphone

как получить размер папки NSCachesDirectory i.e/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 КБ. я не знаю, что не так.


person Nnp    schedule 08.02.2010    source источник


Ответы (2)


Что-то вроде следующего должно помочь вам начать:

- (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 или какой размер файлового блока будет на устройстве, поэтому, хотя общее количество байтов будет одинаковым, фактическое использование диска может отличаться между симулятором и устройством.

person Alex Reynolds    schedule 08.02.2010

Вы действительно имеете в виду /Library/Cache или ~/Library/Cache (каталог кеша приложения). Вы обычно не имеете никакого контроля над первым, поэтому я предполагаю, что вы имеете в виду последнее.

Используйте NSFileManager -enumeratorAtPath: для обхода каталога и используйте -attributesOfItemAtPath:error: для получения размера файла. Я рекомендую делать это медленно в фоновом потоке, чтобы избежать блокировки вашего приложения.

person Rob Napier    schedule 08.02.2010
comment
Спасибо, Роб, я добавил свой пример кода, я не могу понять, правильно это или нет? - person Nnp; 09.02.2010
comment
Как ни странно, папка системного кэша (/var/mobile/Library/Caches) доступна приложениям App Store. - person rpetrich; 09.02.2010
comment
Ваш код выше указывает размер самого элемента папки (768 байт). Это пространство, используемое для отслеживания того, что находится в папке, а не пространство, необходимое для элементов в папке. Вам нужно пройтись по всем этим элементам и сложить их размеры, как в коде Алекса. - person Rob Napier; 09.02.2010