代码之家  ›  专栏  ›  技术社区  ›  Nnp

iPhone中nscachesDirectory的大小

  •  12
  • Nnp  · 技术社区  · 16 年前

    如何获取文件夹nscachesddirectory的大小,即/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(不知道字节或kb),并且我签入了finder,它显示了我的文件夹大小168kb。我不知道怎么了。

    2 回复  |  直到 16 年前
        1
  •  11
  •   Alex Reynolds    16 年前

    以下内容有助于您开始学习:

    - (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上使用的是什么文件系统,或者设备上的文件块大小是多少,所以尽管字节总数相同,但模拟器和设备之间的实际磁盘使用情况可能不同。

        2
  •  1
  •   Rob Napier    16 年前

    您的意思是/library/cache,还是~/library/cache(应用程序的缓存目录)。你通常无法控制前者,所以我假设你是指后者。

    使用nsFileManager的-EnumeratorPath:浏览目录并使用-attributesOffiteMatPath:error:获取文件大小。我建议在后台线程上缓慢地执行此操作,以避免阻塞应用程序。