размер NSCachesDirectory в iphone - PullRequest
       18

размер NSCachesDirectory в iphone

12 голосов
/ 08 февраля 2010

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

Ответы [ 2 ]

11 голосов
/ 09 февраля 2010

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

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

EDIT

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

1 голос
/ 09 февраля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...