获取缓存文件大小并清理

通常用于删除缓存的时,计算缓存大小

//单个文件的大小

- (long long) fileSizeAtPath:(NSString*) filePath{
    NSFileManager* manager = [NSFileManager defaultManager];
    if ([manager fileExistsAtPath:filePath]){
        return [[manager attributesOfItemAtPath:filePath error:nil] fileSize];
    }
    return 0;
}

//遍历文件夹获得文件夹大小,返回多少M

- (float ) folderSizeAtPath:(NSString*) folderPath{
    NSFileManager* manager = [NSFileManager defaultManager];
    if (![manager fileExistsAtPath:folderPath]) return 0;
    NSEnumerator *childFilesEnumerator = [[manager subpathsAtPath:folderPath] objectEnumerator];
    NSString* fileName;
    long long folderSize = 0;
    while ((fileName = [childFilesEnumerator nextObject]) != nil){
        NSString* fileAbsolutePath = [folderPath stringByAppendingPathComponent:fileName];
        folderSize += [self fileSizeAtPath:fileAbsolutePath];
    }
    return folderSize/(1024.0*1024.0);
}

SDImageCache计算缓存方法

- (NSUInteger)getSize {
    __block NSUInteger size = 0;
    dispatch_queue_t ioQueue = dispatch_queue_create("com.hackemist.SDWebImageCache", DISPATCH_QUEUE_SERIAL);
    dispatch_sync(ioQueue, ^{
        NSDirectoryEnumerator *fileEnumerator = [_fileManager enumeratorAtPath:self.diskCachePath];
        for (NSString *fileName in fileEnumerator) {
            NSString *filePath = [self.diskCachePath stringByAppendingPathComponent:fileName];
            NSDictionary *attrs = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:nil];
            size += [attrs fileSize];
        }
    });
    return size;
}

删除缓存

//单文件

-(void)cleanDisk{
    NSFileManager *defaultManager = [NSFileManager defaultManager];
    [defaultManager removeItemAtPath:self.diskCachePath error:nil];
}

多文件

-(void)cleanDisk{
    dispatch_async(
                   dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
                   , ^{
                       NSString *cachPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask, YES) objectAtIndex:0];

                       NSArray *files     = [[NSFileManager defaultManager] subpathsAtPath:cachPath];
                       NSLog(@"files :%d",[files count]);
                       for (NSString *p in files) {
                           NSError *error;
                       NSString *path     = [cachPath stringByAppendingPathComponent:p];
                           if ([[NSFileManager defaultManager] fileExistsAtPath:path]) {
                               [[NSFileManager defaultManager] removeItemAtPath:path error:&error];
                           }
                       }
    [self performSelectorOnMainThread:@selector(clearCacheSuccess) withObject:nil waitUntilDone:YES];

}

-(void)clearCacheSuccess
{
    NSLog(@"清理成功");
}
时间: 2024-10-22 15:18:18

获取缓存文件大小并清理的相关文章

android获取缓存大小并清理缓存

本文主要注重介绍实战操作,理论知识可能介绍的不多,勿喷 简单说两句缓存的好处: 采用缓存,可以进一步大大缓解数据交互的压力,又能提供一定的离线浏览.下边我简略列举一下缓存管理的适用环境: 1. 提供网络服务的应用 2. 数据更新不需要实时更新,哪怕是3-5分钟的延迟也是可以采用缓存机制. 3. 缓存的过期时间是可以接受的(类似网易的新闻阅读,支持离线离线阅读) 这样所带来的好处: 1. 减小服务器的压力 2. 提高客户端的响应速度(本地数据提取嘛) 3. 一定程度上支持离线浏览(可以参考网易的那

iOS 获取本地缓存文件大小及清除

由于项目需求中要求计算出应用内的缓存文件的大小及清除工作,做了一个小小的模块提供给大家分享,随便说句买苹果还是选个16g以上的那样妈妈就不会担心你的内存不用够用了哦! // 清除本地缓存文件 + (void)clearCacheFile { NSString *cachPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSArray *fi

SDWebimage如何获取缓存大小以及清除缓存

sdwebimage如何获取缓存大小以及清除缓存 1.找到SDImageCache类 2.添加如下方法: - (float)checkTmpSize {    float totalSize = 0;    NSDirectoryEnumerator *fileEnumerator = [[NSFileManager defaultManager] enumeratorAtPath:diskCachePath];    for (NSString *fileName in fileEnumera

android获取缓存大小和清除缓存

package com.jianong.xmtt.util; import android.content.Context; import android.os.Environment; import java.io.File; import java.math.BigDecimal; /** * Created by hgl on 2016/6/23. */ public class DataCleanManager { /** * 获取缓存大小 * @param context * @ret

Python获取远程文件大小函数示例

分享一个Python获取远程文件大小的函数代码,简单实用,是学习python编程的基础实例. 代码: def getRemoteFileSize(url, proxy=None): """ 通过content-length头获取远程文件大小 url - 目标文件URL proxy - 代理 """ opener = urllib2.build_opener() if proxy: if url.lower().startswith('https:

多线程下使用HttpContext.Current.Cache.Get(key) 获取缓存时抛出null错误

解决办法如下: 1 /// <summary> 2 /// 获取缓存对象 3 /// </summary> 4 /// <param name="key">缓存Key</param> 5 /// <returns>object对象</returns> 6 public static object Get(string key) 7 { 8 if (string.IsNullOrEmpty(key)) 9 { 10

PHP 获取远程文件大小的3种解决方法

转 http://www.3lian.com/edu/2013/07-12/80472.html 以下是对PHP中获取远程文件大小的3种解决方法进行了详细的介绍,需要的朋友参考下 1.使用file_get_contents() 复制代码 代码如下: <?php $file = file_get_contents($url); echo strlen($file); ?> 2. 使用get_headers() 复制代码 代码如下: <?php $header_array = get_hea

android获取指定文件大小

/** * 获取指定文件大小 * @param f * @return * @throws Exception */ public static long getFileSize(File file) throws Exception { long size = 0; if (file.exists()) { FileInputStream fis = null; fis = new FileInputStream(file); size = fis.available(); } else {

查看AWR和获取缓存库中的执行计划

1.AWR执行计划 select * from table(dbms_xplan.display_awr('8qfs8857jc8fw',null,null,'ADVANCED'));  SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_AWR('8qfs8857jc8fw')) select tf.* from dba_hist_sqltext ht, table(dbms_xplan.display_awr(ht.sql_id, null, null, 'all'