标签:
1 // Created by XT on 16/7/31. 2 // Copyright © 2016年 XT. All rights reserved. 3 // 专门处理文件 (标注方式一) 4 5 /** 6 *专门处理文件 (标注方式二) 7 */ 8 @interface XTFileManager : NSObject
1 // 判断下是否是隐藏文件 2 if ([subPath hasPrefix:@".DS"]) continue; 3 // 是否是文件夹 4 BOOL isDirectory; 5 // 判断文件是否存在,并且是否是文件夹 6 [mgr fileExistsAtPath:filePath isDirectory:&isDirectory]; 7 if (isDirectory) continue;
1 if (!isExist || !isDirectory) { 2 // 抛异常:NSException 3 // name:异常名称 4 // reason:异常原因 5 方式一: //NSException *excp = [NSException exceptionWithName:@"FileError" reason:@"笨蛋,传入的路径可 6 能为空,或者不是文件夹路径,仔细好好检查吧" userInfo:nil]; 7 //[excp raise]; 8 方式二:@throw [NSException exceptionWithName:@"FileError" reason:@"笨蛋,传入的路径可能为空,或者不 9 是文件夹路径,仔细好好检查吧" userInfo:nil]; 10 }
1 + (void)removeDirectory:(NSString *)directoryPath 2 { 3 NSFileManager *mgr = [NSFileManager defaultManager]; 4 BOOL isDirectory; 5 BOOL isExist = [mgr fileExistsAtPath:directoryPath isDirectory:&isDirectory]; 6 7 if (!isExist || !isDirectory) { 8 // 抛异常:NSException 9 @throw [NSException exceptionWithName:@"FileError" reason:@"笨蛋,传入的路径可能为空,或者不是文 10 件夹路径,仔细好好检查吧" userInfo:nil]; 11 } 12 // 1.删除Cache文件夹 13 [mgr removeItemAtPath:directoryPath error:nil]; 14 // 2.创建新Cache文件夹 15 [mgr createDirectoryAtPath:directoryPath withIntermediateDirectories:YES attributes:nil error:nil]; 16 } 17 18 + (NSInteger)getSizeOfDirectoryPath:(NSString *)directoryPath 19 { 20 // 1.获取文件管理者对象 21 NSFileManager *mgr = [NSFileManager defaultManager]; 22 // 判断传入文件夹路径存在 23 BOOL isDirectory; 24 BOOL isExist = [mgr fileExistsAtPath:directoryPath isDirectory:&isDirectory]; 25 26 if (!isExist || !isDirectory) { 27 // 抛异常:NSException 28 // name:异常名称 29 // reason:异常原因 30 //NSException *excp = [NSException exceptionWithName:@"FileError" reason:@"笨蛋,传入的路径可能为 31 空,或者不是文件夹路径,仔细好好检查吧" userInfo:nil]; 32 // [excp raise]; 33 @throw [NSException exceptionWithName:@"FileError" reason:@"笨蛋,传入的路径可能为空,或者不是文件 34 夹路径,仔细好好检查吧" userInfo:nil]; 35 } 36 NSInteger totalSize = 0; 37 // 2.获取所有文件(传递文件夹路径) 38 // Path:文件夹路径 39 // subpathsAtPath:获取一个文件夹中所有子路径,包含多级路径 40 NSArray *subPaths = [mgr subpathsAtPath:directoryPath]; 41 // 3.遍历所有文件 42 for (NSString *subPath in subPaths) { 43 // 4.拼接完整文件名 44 NSString *filePath = [directoryPath stringByAppendingPathComponent:subPath]; 45 // 判断下是否是隐藏文件 46 if ([subPath hasPrefix:@".DS"]) continue; 47 // 是否是文件夹 48 BOOL isDirectory; 49 // 判断文件是否存在,并且是否是文件夹 50 [mgr fileExistsAtPath:filePath isDirectory:&isDirectory]; 51 if (isDirectory) continue; 52 // 5.attributesOfItemAtPath:传入文件全路径,就能获取文件属性 53 NSDictionary *attr = [mgr attributesOfItemAtPath:filePath error:nil]; 54 // 6.把文件尺寸累加 55 totalSize += [attr fileSize]; 56 } 57 return totalSize; 58 } 59
1 - (NSURLSessionDataTask *)GET:(NSString *)URLString 2 parameters:(id)parameters 3 progress:(void (^)(NSProgress * _Nonnull))downloadProgress 4 success:(void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success 5 failure:(void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure 6 7 8 // 异步任务,不要返回数据 9 + (void)getSizeOfDirectoryPath:(NSString *)directoryPath completion:(void (^)(NSInteger totalSize))completion 10 { 11 dispatch_async(dispatch_get_global_queue(0, 0), ^{ 12 // 子线程执行 13 // 1.获取文件管理者对象 14 NSFileManager *mgr = [NSFileManager defaultManager]; 15 // 判断传入文件夹路径存在 16 BOOL isDirectory; 17 BOOL isExist = [mgr fileExistsAtPath:directoryPath isDirectory:&isDirectory]; 18 19 if (!isExist || !isDirectory) { 20 @throw [NSException exceptionWithName:@"FileError" reason:@"笨蛋,传入的路径可能为空,或者不是文件夹路径,仔细好好检查吧" userInfo:nil]; 21 } 22 NSInteger totalSize = 0; 23 24 // 2.获取所有文件(传递文件夹路径) 25 NSArray *subPaths = [mgr subpathsAtPath:directoryPath]; 26 // 3.遍历所有文件 27 for (NSString *subPath in subPaths) { 28 // 4.拼接完整文件名 29 NSString *filePath = [directoryPath stringByAppendingPathComponent:subPath]; 30 31 // 判断下是否是隐藏文件 32 if ([subPath hasPrefix:@".DS"]) continue; 33 // 是否是文件夹 34 BOOL isDirectory; 35 // 判断文件是否存在,并且是否是文件夹 36 [mgr fileExistsAtPath:filePath isDirectory:&isDirectory]; 37 if (isDirectory) continue; 38 // 5.attributesOfItemAtPath:传入文件全路径,就能获取文件属性 39 NSDictionary *attr = [mgr attributesOfItemAtPath:filePath error:nil]; 40 // 6.把文件尺寸累加 41 totalSize += [attr fileSize]; 42 } 43 // 一定要记得回到主线程 44 dispatch_sync(dispatch_get_main_queue(), ^{ 45 if (completion) { 46 注意:()内可以写这个方法定义的任何值,但要和block的参数类型相同,最后括号内的值会传给Block的参数 47 completion(totalSize); 48 } 49 }); 50 }); 51 }
标签:
原文地址:http://www.cnblogs.com/xiaotian666/p/5731433.html