美文网首页iOS开发新发现
iOS-计算文件/文件夹大小,删除文件,以及SDWebImage

iOS-计算文件/文件夹大小,删除文件,以及SDWebImage

作者: Newquine | 来源:发表于2017-03-21 16:29 被阅读142次

    接着上篇下载word/pdf/txt等文档的文章,此篇涉及到清除这些文档。本文实现文件/文件夹大小的计算以及清除文件,还有清除SDWebImage缓存图片的一些内容。不废话,直接上代码。

    一.计算文件/文件夹大小

    /**
     获取文件/文件夹大小
    
     @param fileName 文件/文件夹路径
     @return 大小
     */
    - (CGFloat)getFileSizeWithFileName:(NSString *)fileName {
         //文件管理者
         NSFileManager *mgr = [NSFileManager defaultManager];
         //判断字符串是否为文件/文件夹
         BOOL dir = NO;
         BOOL exists = [mgr fileExistsAtPath:fileName isDirectory:&dir];
        //文件/文件夹不存在
        if (exists == NO) return 0;
        //self是文件夹
        if (dir){
             //遍历文件夹中的所有内容
             NSArray *subpaths = [mgr subpathsAtPath:fileName];
             //计算文件夹大小
             NSInteger totalByteSize = 0;
             for (NSString *subpath in subpaths){
                      //拼接全路径
                       NSString *fullSubPath = [fileName stringByAppendingPathComponent:subpath];
                   //判断是否为文件
                    BOOL dir = NO;
                    [mgr fileExistsAtPath:fullSubPath isDirectory:&dir];
                     if (dir == NO){//是文件
                        NSDictionary *attr = [mgr attributesOfItemAtPath:fullSubPath error:nil];
                        totalByteSize += [attr[NSFileSize] integerValue];
                    }
                }
             return totalByteSize;
            
        } else{//是文件
            NSDictionary *attr = [mgr attributesOfItemAtPath:fileName error:nil];
            return [attr[NSFileSize] floatValue];
        }
    }
    
    

    二.获取文件夹下文件大小和SDWebImage缓存大小

    CGFloat totalSize = 0;
        
        //获取Documents下文件的总共大小
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths lastObject];
        CGFloat docSize = [self getFileSizeWithFileName:documentsDirectory];
        NKLog(@"docSize=%ld",(long)docSize);
        
        //获取SDWebimage缓存的图片大小
        CGFloat imageSize = [[SDImageCache sharedImageCache] getSize];
        NKLog(@"imageSize=%lu",(unsigned long)imageSize);
        
        //缓存图片大小+下载的word文档大小
        totalSize = (docSize + imageSize)/1000/1000;
        
        self.memeryLabel.text = [NSString stringWithFormat:@"%.2fM",totalSize];
    

    三.清除文件和缓存图片

    /**
     清除缓存
     */
    -(void)clearMemery {
        NSUInteger cacheSize = [[SDImageCache sharedImageCache] getSize];
        if (cacheSize == 0) {
            [MBProgressHUD showSuccess:@"没有缓存" toView:self.view];
        }else {
            [[SDImageCache sharedImageCache] clearMemory];
            [MBProgressHUD showMessage:@"正在清除缓存" toView:self.view];
            
            //清除Documents下的word文档
            NSString *DocumentsPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
            NSDirectoryEnumerator *enumerator = [[NSFileManager defaultManager] enumeratorAtPath:DocumentsPath];
            for (NSString *fileName in enumerator) {
                [[NSFileManager defaultManager] removeItemAtPath:[DocumentsPath stringByAppendingPathComponent:fileName] error:nil];
            }
            
            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                [MBProgressHUD hideHUD];
                [MBProgressHUD showSuccess:@"清除缓存成功"];
                [MBProgressHUD hideHUDForView:self.view];
                self.memeryLabel.text = @"0.0M";
            });
        }
    }
    
    

    好了,实现了,慕言的世界!!!

    相关文章

      网友评论

        本文标题:iOS-计算文件/文件夹大小,删除文件,以及SDWebImage

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