美文网首页封装学无止境
封装一个计算文件大小的功能

封装一个计算文件大小的功能

作者: 凡尘一笑 | 来源:发表于2016-10-31 09:59 被阅读20次
    第一步:
    Snip20161031_5.png
    第二步:
    Snip20161031_6.png
    第三步:
    Snip20161031_7.png
    #import <Foundation/Foundation.h>
    @interface NSString (LYWExtension)
    - (unsigned long long)fileSize;
    @end
    
    第四步:
    Snip20161031_14.png
    #import "NSString+LYWExtension.h"
    @implementation NSString (LYWExtension)
    - (unsigned long long)fileSize
    {
        // 总大小 
        unsigned long long size = 0;
        // 文件管理者
        NSFileManager *mgr = [NSFileManager defaultManager];
        // 是否为文件夹
        BOOL isDirectory = NO;
        // 路径是否存在
        BOOL exists = [mgr fileExistsAtPath:self isDirectory:&isDirectory];
        if (!exists) return size;
        if (isDirectory) { // 文件夹
            // 获得文件夹的大小  == 获得文件夹中所有文件的总大小
            NSDirectoryEnumerator *enumerator = [mgr enumeratorAtPath:self];
            for (NSString *subpath in enumerator) {
                // 全路径
                NSString *fullSubpath = [self stringByAppendingPathComponent:subpath];
                // 累加文件大小
                size += [mgr attributesOfItemAtPath:fullSubpath error:nil].fileSize;
            }
        } else { // 文件
            size = [mgr attributesOfItemAtPath:self error:nil].fileSize;
        }
        return size;
    }
    @end
    

    初步简单使用

    Snip20161031_13.png

    效果:


    regi.gif

    我们打开沙河查看文件大小,对比。

    Snip20161031_15.png

    下面我们就让它显示成多少M 多少G

    Snip20161031_17.png
    Snip20161031_18.png

    清除缓存

    Snip20161031_19.png

    代码附上

    #import "SsrtextViewController.h"
    #import "NSString+LYWExtension.h"
    #import "SVProgressHUD.h"
    #import "SDImageCache.h"
    @interface SsrtextViewController ()
    
    @property (strong, nonatomic)UILabel *lab;
    
    @end
    
    @implementation SsrtextViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
     
        _lab = [[UILabel alloc] initWithFrame:CGRectMake(0, 100, 300, 100)];
        _lab.backgroundColor = RandomColor;
        _lab.textAlignment = NSTextAlignmentCenter;
        [self.view addSubview:_lab];
        _lab.text = @"清除缓存(正在计算缓存大小...)";
    
        // 在子线程计算缓存大小
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
           
            // 获得缓存文件夹路径(这个是我们自己的缓存文件)
            unsigned long long size = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject stringByAppendingPathComponent:@"Custom"].fileSize;
            //这个是SDWebImage缓存的文件
            size += [SDImageCache sharedImageCache].getSize;
            NSString *sizeText = nil;
            if (size >= pow(10, 9)) { // size >= 1GB
                sizeText = [NSString stringWithFormat:@"%.2fGB", size / pow(10, 9)];
            } else if (size >= pow(10, 6)) { // 1GB > size >= 1MB
                sizeText = [NSString stringWithFormat:@"%.2fMB", size / pow(10, 6)];
            } else if (size >= pow(10, 3)) { // 1MB > size >= 1KB
                sizeText = [NSString stringWithFormat:@"%.2fKB", size / pow(10, 3)];
            } else { // 1KB > size
                sizeText = [NSString stringWithFormat:@"%zdB", size];
            }
            //下面也是一种换算文件大小的方式
            //            if (size >= 1000 * 1000 * 1000) { // size >= 1GB
            //                sizeText = [NSString stringWithFormat:@"%.2fGB", size / 1000.0 / 1000.0 / 1000.0];
            //            } else if (size >= 1000 * 1000) { // 1GB > size >= 1MB
            //                sizeText = [NSString stringWithFormat:@"%.2fMB", size / 1000.0 / 1000.0];
            //            } else if (size >= 1000) { // 1MB > size >= 1KB
            //                sizeText = [NSString stringWithFormat:@"%.2fKB", size / 1000.0];
            //            } else { // 1KB > size
            //                sizeText = [NSString stringWithFormat:@"%zdB", size];
            //            }
            
            // 生成文字
            NSString *text = [NSString stringWithFormat:@"清除缓存(%@)", sizeText];
            
            // 回到主线程
            dispatch_async(dispatch_get_main_queue(), ^{
                // 设置文字
                _lab.text = text;
                // 添加手势监听器
                [_lab addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(clearCache)]];
                
            });
        });
    }
    
    
    /**
     *  清除缓存
     */
    - (void)clearCache
    {
        // 弹出指示器
        [SVProgressHUD showInfoWithStatus:@"正在清除缓存..."];
        // 删除SDWebImage的缓存
        [[SDImageCache sharedImageCache] clearDiskOnCompletion:^{
            // 删除自定义的缓存
            dispatch_async(dispatch_get_global_queue(0, 0), ^{
                //文件管理者
                NSFileManager *mgr = [NSFileManager defaultManager];
                //移除该文件夹
                [mgr removeItemAtPath:[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject stringByAppendingPathComponent:@"Custom"] error:nil];
                //再创建该文件夹
                [mgr createDirectoryAtPath:[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject stringByAppendingPathComponent:@"Custom"] withIntermediateDirectories:YES attributes:nil error:nil];
                // 所有的缓存都清除完毕
                dispatch_async(dispatch_get_main_queue(), ^{
                    // 隐藏指示器
                    [SVProgressHUD dismiss];
                    // 设置文字
                    _lab.text = @"清除缓存(0B)";
                });
            });
        }];
    }
    
    

    我们再来对比看一下

    Snip20161031_22.png

    备注:(如果有需要封装的文件,可联系我,我已经教大家封装了,其实复制过去也很快)如果您嫌麻烦那就去github下载Dome:https://github.com/LYWGod/fileSize

    如果有不足或者错误的地方还望各位读者批评指正,可以评论留言,笔者收到后第一时间回复。

    QQ/微信:2366889552 /lan2018yingwei。

    简书号:凡尘一笑:[简书]

    http://www.jianshu.com/users/0158007b8d17/latest_articles

    感谢各位观众老爷的阅读,如果觉得笔者写的还凑合,可以关注或收藏一下,不定期分享一些好玩的实用的demo给大家。

    文/凡尘一笑(简书作者)

    著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

    相关文章

      网友评论

        本文标题:封装一个计算文件大小的功能

        本文链接:https://www.haomeiwen.com/subject/awhyuttx.html