Подтвердить что ты не робот

Размер 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 КБ. Я не знаю, что не так.

4b9b3361

Ответ 1

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

- (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

Предполагая, что вы запускаете это в Simulator, Finder, вероятно, сообщает об использовании файловых блоков для этих байтов. Эти блоки обязательно будут больше, чем сами данные файла. Читайте в системе HFS +, чтобы узнать о блоках: http://en.wikipedia.org/wiki/HFS_Plus

Я не уверен, какая файловая система используется на iPhone или какой размер блока файлов будет на устройстве, поэтому, когда общая сумма байтов будет одинаковой, фактическое использование диска может отличаться между Simulator и устройством.

Ответ 2

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

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