размер NSCachesDirectory в iPhone

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

12
задан Nnp 8 February 2010 в 22:09
поделиться

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

РЕДАКТИРОВАТЬ

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

11
ответ дан 2 December 2019 в 21:43
поделиться

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

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

1
ответ дан 2 December 2019 в 21:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: