博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
处理文件缓存
阅读量:6426 次
发布时间:2019-06-23

本文共 2427 字,大约阅读时间需要 8 分钟。

处理文件缓存

 

#import <Foundation/Foundation.h>

 

 

 

@interface LZJFileTool : NSObject

 

/**

 *  获取文件夹尺寸

 *

 *  @param directoryPath 文件夹路径

 *

 *  @return 返回文件夹尺寸

 */

+ (void)getFileSize:(NSString *)directoryPath completion:(void(^)(NSInteger))completion;

 

 

/**

 *  删除文件夹所有文件

 *

 *  @param directoryPath 文件夹路径

 */

+ (void)removeDirectoryPath:(NSString *)directoryPath;

 

 

@end

 



 

#import "LZJFileTool.h"

 

@implementation LZJFileTool

 

+ (void)removeDirectoryPath:(NSString *)directoryPath

{

    // 获取文件管理者

    NSFileManager *mgr = [NSFileManager defaultManager];

    

    BOOL isDirectory;

    BOOL isExist = [mgr fileExistsAtPath:directoryPath isDirectory:&isDirectory];

    

    if (!isExist || !isDirectory) {

        // 抛异常

        // name:异常名称

        // reason:报错原因

        NSException *excp = [NSException exceptionWithName:@"pathError" reason:@" 需要传入的是文件夹路径,并且路径要存在" userInfo:nil];

        [excp raise];

        

    }

    

    // 获取cache文件夹下所有文件,不包括子路径的子路径

    NSArray *subPaths = [mgr contentsOfDirectoryAtPath:directoryPath error:nil];

    

    for (NSString *subPath in subPaths) {

        // 拼接完成全路径

        NSString *filePath = [directoryPath stringByAppendingPathComponent:subPath];

        

        // 删除路径

        [mgr removeItemAtPath:filePath error:nil];

    }

 

}

 

// 自己去计算SDWebImage做的缓存

+ (void)getFileSize:(NSString *)directoryPath completion:(void(^)(NSInteger))completion

{

    

    // 获取文件管理者

    NSFileManager *mgr = [NSFileManager defaultManager];

    BOOL isDirectory;

    BOOL isExist = [mgr fileExistsAtPath:directoryPath isDirectory:&isDirectory];

    

    if (!isExist || !isDirectory) {

        // 抛异常

        // name:异常名称

        // reason:报错原因

       NSException *excp = [NSException exceptionWithName:@"pathError" reason:@" 需要传入的是文件夹路径,并且路径要存在" userInfo:nil];

        [excp raise];

        

    }

    

    dispatch_async(dispatch_get_global_queue(0, 0), ^{

        

        // 获取文件夹下所有的子路径,包含子路径的子路径

        NSArray *subPaths = [mgr subpathsAtPath:directoryPath];

        

        NSInteger totalSize = 0;

        

        for (NSString *subPath in subPaths) {

            // 获取文件全路径

            NSString *filePath = [directoryPath stringByAppendingPathComponent:subPath];

            

            // 判断隐藏文件

            if ([filePath containsString:@".DS"]) continue;

            

            // 判断是否文件夹

            BOOL isDirectory;

            // 判断文件是否存在,并且判断是否是文件夹

            BOOL isExist = [mgr fileExistsAtPath:filePath isDirectory:&isDirectory];

            if (!isExist || isDirectory) continue;

            

            // 获取文件属性

            // attributesOfItemAtPath:只能获取文件尺寸,获取文件夹不对,

            NSDictionary *attr = [mgr attributesOfItemAtPath:filePath error:nil];

            

            // 获取文件尺寸

            NSInteger fileSize = [attr fileSize];

            

            totalSize += fileSize;

        }

        

        // 计算完成回调

        dispatch_sync(dispatch_get_main_queue(), ^{

            if (completion) {

                completion(totalSize);

            }

        });

        

        

 

    });

    

    

}

 

@end



 

转载于:https://www.cnblogs.com/liuzhenjie/p/5501966.html

你可能感兴趣的文章
Swt/Jface进度条
查看>>
.NET建议使用的大小写命名原则
查看>>
Git:错误:error:src refspec master does not match any
查看>>
SSIS 数据类型和类型转换
查看>>
Oracle数据库“Specified cast is农田valid”
查看>>
数据层新思路,写数据库无关的数据层 ORM在数据库内做更为合适
查看>>
armv8(aarch64)linux内核中flush_dcache_all函数详细分析【转】
查看>>
房地产英语 Real estate词汇
查看>>
python接口自动化测试(八)-unittest-生成测试报告
查看>>
第 26 章 MySQL
查看>>
C#中三种截屏方式总结
查看>>
Spring.net 学习笔记之ASP.NET底层架构
查看>>
C# System.Windows.Forms.WebBrowser中判断浏览器内核和版本
查看>>
Java 动态太极图 DynamicTaiChi (整理)
查看>>
微信公众平台后台编辑器上线图片缩放和封面图裁剪功能
查看>>
git使用教程2-更新github上代码
查看>>
张掖百公里,再次折戟
查看>>
SAP QM Batch to Batch的转移过账事务中的Vendor Batch
查看>>
本期最新 9 篇论文,帮你完美解决「读什么」的问题 | PaperDaily #19
查看>>
图解SSIS监视文件夹并自动导入数据
查看>>