Believe in your own future, will thank yourself right now Sinner Yun

Sinner_Yun

计算沙盒下文件夹内容大小 清空沙盒 文件 目录

 1 +(float)fileSizeForDir:(NSString*)path//计算文件夹下文件的总大小
 2 
 3 {
 4 
 5     NSFileManager *fileManager = [[NSFileManager alloc] init];
 6 
 7     float size =0;
 8 
 9     NSArray* array = [fileManager contentsOfDirectoryAtPath:path error:nil];
10 
11     for(int i = 0; i<[array count]; i++)
12 
13     {
14 
15         NSString *fullPath = [path stringByAppendingPathComponent:[array objectAtIndex:i]];
16 
17         
18 
19         BOOL isDir;
20 
21         if ( !([fileManager fileExistsAtPath:fullPath isDirectory:&isDir] && isDir) )
22 
23         {
24 
25             NSDictionary *fileAttributeDic=[fileManager attributesOfItemAtPath:fullPath error:nil];
26 
27             size+= fileAttributeDic.fileSize/ 1024.0/1024.0;
28 
29         }
30 
31         else
32 
33         {
34 
35             [self fileSizeForDir:fullPath];
36 
37         }
38 
39     }
40 
41     [fileManager release];
42 
43     return size;
44 
45 }

 

SandBox,沙盒机制,是一种安全体系。我们所开发的每一个应用程序在设备上会有一个对应的沙盒文件夹,当前的程序只能在自己的沙盒文件夹中读取文件,不能访问其他应用程序的沙盒。在项目中添加的所有非代码的资源,比如图片、声音、属性列表等都存在自己的沙盒中。此外,在程序运行中动态生成的或者从网络获取的数据,如果要存储,也都是存储到沙盒中。

沙盒中的默认文件夹

(1)Documents:苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录

(2)Library:存储程序的默认设置或其它状态信息;

里面又包含两个文件夹Caches和Preference;

Caches,存放缓存文件,iTunes不会备份此目录

(3)tmp:提供一个即时创建临时文件的地方

获取沙盒中的不同目录

  1 代码
  2 
  3 //  JRSandBoxPath.h
  4 //  Fmdb
  5 //
  6 //  Created by jerei on 15-10-30.
  7 //  Copyright (c) 2015年 jerei. All rights reserved.
  8 //
  9 #import <Foundation/Foundation.h>
 10 @interface JRSandBoxPath: NSObject
 11 // 获取沙盒Document的文件目录
 12 + (NSString *)getDocumentDirectory;
 13 // 获取沙盒Library的文件目录
 14 + (NSString *)getLibraryDirectory;
 15 // 获取沙盒Library/Caches的文件目录
 16 + (NSString *)getCachesDirectory;
 17 // 获取沙盒Preference的文件目录
 18 + (NSString *)getPreferencePanesDirectory;
 19 // 获取沙盒tmp的文件目录
 20 + (NSString *)getTmpDirectory;
 21 @end
 22 //
 23 //  JRSandBoxPath.m
 24 //  Fmdb
 25 //
 26 //  Created by jerei on 15-10-30.
 27 //  Copyright (c) 2015年 jerei. All rights reserved.
 28 //
 29 #import " JRSandBoxPath.h"
 30 @implementation JRSandBoxPath
 31 #pragma mark - 获取沙盒Document的文件目录
 32 + (NSString *)getDocumentDirectory{
 33   return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
 34 }
 35 #pragma mark - 获取沙盒Library的文件目录
 36 + (NSString *)getLibraryDirectory{
 37   return [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
 38 }
 39 #pragma mark - 获取沙盒Library/Caches的文件目录
 40 + (NSString *)getCachesDirectory{
 41   return [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
 42 }
 43 #pragma mark - 获取沙盒Preference的文件目录
 44 + (NSString *)getPreferencePanesDirectory{
 45   return [NSSearchPathForDirectoriesInDomains(NSPreferencePanesDirectory, NSUserDomainMask, YES) lastObject];
 46 }
 47 #pragma mark - 获取沙盒tmp的文件目录
 48 + (NSString *)getTmpDirectory{
 49   return
 50   NSTemporaryDirectory();
 51 }
 52 @end
 53 清除缓存
 54 
 55 在开发的过程中,遇到有用的数据,会进行缓存,当该数据不需要时,可以清除。在这里整理了几个方法,统计问价的大小,清除指定文件,清除指定目录下的全部文件等。
 56 
 57 代码
 58 
 59 //  JRCleanCaches.h
 60 //  Fmdb
 61 //
 62 //  Created by jerei on 15-10-30.
 63 //  Copyright (c) 2015年 jerei. All rights reserved.
 64 //
 65 #import <Foundation/Foundation.h>
 66 @interface JRCleanCaches : NSObject
 67 // 根据路径返回目录或文件的大小
 68 + (double)sizeWithFilePath:(NSString *)path;
 69 // 得到指定目录下的所有文件
 70 + (NSArray *)getAllFileNames:(NSString *)dirPath;
 71 // 删除指定目录或文件
 72 + (BOOL)clearCachesWithFilePath:(NSString *)path;
 73 // 清空指定目录下文件
 74 + (BOOL)clearCachesFromDirectoryPath:(NSString *)dirPath;
 75 @end
 76 //
 77 //  JRCleanCaches.m
 78 //  Fmdb
 79 //
 80 //  Created by jerei on 15-10-30.
 81 //  Copyright (c) 2015年 jerei. All rights reserved.
 82 //
 83 #import "JRCleanCaches.h"
 84 @implementation JRCleanCaches
 85 #pragma mark - 根据路径返回目录或文件的大小
 86 + (double)sizeWithFilePath:(NSString *)path{
 87   // 1.获得文件夹管理者
 88   NSFileManager *manger = [NSFileManager defaultManager];
 89   // 2.检测路径的合理性
 90   BOOL dir = NO;
 91   BOOL exits = [manger fileExistsAtPath:path isDirectory:&dir];
 92   if (!exits) return 0;
 93   // 3.判断是否为文件夹
 94   if (dir) { // 文件夹, 遍历文件夹里面的所有文件
 95     // 这个方法能获得这个文件夹下面的所有子路径(直接\间接子路径)
 96     NSArray *subpaths = [manger subpathsAtPath:path];
 97     int totalSize = 0;
 98     for (NSString *subpath in subpaths) {
 99       NSString *fullsubpath = [path stringByAppendingPathComponent:subpath];
100       BOOL dir = NO;
101       [manger fileExistsAtPath:fullsubpath isDirectory:&dir];
102       if (!dir) { // 子路径是个文件
103         NSDictionary *attrs = [manger attributesOfItemAtPath:fullsubpath error:nil];
104         totalSize += [attrs[NSFileSize] intValue];
105       }
106     }
107     return totalSize / (1024 * 1024.0);
108   } else { // 文件
109     NSDictionary *attrs = [manger attributesOfItemAtPath:path error:nil];
110     return [attrs[NSFileSize] intValue] / (1024.0 * 1024.0);
111   }
112 }
113 #pragma mark - 得到指定目录下的所有文件
114 + (NSArray *)getAllFileNames:(NSString *)dirPath{
115   NSArray *files = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:dirPath error:nil];
116   return files;
117 }
118 #pragma mark - 删除指定目录或文件
119 + (BOOL)clearCachesWithFilePath:(NSString *)path{
120   NSFileManager *mgr = [NSFileManager defaultManager];
121   return [mgr removeItemAtPath:path error:nil];
122 }
123 #pragma mark - 清空指定目录下文件
124 + (BOOL)clearCachesFromDirectoryPath:(NSString *)dirPath{
125   //获得全部文件数组
126   NSArray *fileAry =  [JRCleanCaches getAllFileNames:dirPath];
127   //遍历数组
128   BOOL flag = NO;
129   for (NSString *fileName in fileAry) {
130     NSString *filePath = [dirPath stringByAppendingPathComponent:fileName];
131     flag = [JRCleanCaches clearCachesWithFilePath:filePath];
132     if (!flag)
133       break;
134   }
135   return flag;
136 }
137 @end

 

posted on 2015-12-30 21:58  Sinner_Yun  阅读(432)  评论(0编辑  收藏  举报

导航