沙盒文件管理淺析

注:本工具類需要導入SDWebImage的緩存管理類“SDImageCache.h”頭文件
若需要管理其他三方緩存,將其頭文件導入并作相應處理即可。

寫在前面的

該工具類只是對沙盒文件路徑查找、刪除,對文件內容歸檔、解檔,進行了一些簡單的封裝,第一次發文,還望大家多多指點。
bling bling !!! github地址


沙盒查看方法

我知道你們喜歡貼圖黨。。。

1.xcode菜單欄Window-Devices


屏幕快照 2016-09-23 下午12.02.20.png

2.選擇真機


屏幕快照 2016-09-23 下午12.03.00.png

3.選中右側你要沙盒的app
屏幕快照 2016-09-23 下午12.03.17.png

4.Download Container


屏幕快照 2016-09-23 下午12.03.22.png

5.保存之后文件右擊-顯示包內容

6.方得廬山真面目
屏幕快照 2016-09-23 下午12.01.51.png

你們最愛的

#import@interface LZSandBoxManager : NSObject

#pragma mark - 獲取沙盒目錄 -

/**

獲取沙盒Document目錄

@return Document目錄

*/

+ (NSString *)getDocumentDirectory;

/**

獲取沙盒Library目錄

@return Library目錄

*/

+ (NSString *)getLibraryDirectory;

/**

獲取沙盒Library/Caches目錄

@return Library/Caches目錄

*/

+ (NSString *)getCachesDirectory;

/**

獲取沙盒Preference目錄

@return Preference目錄

*/

+ (NSString *)getPreferenceDirectory;

/**

獲取沙盒Tmp目錄

@return Tmp目錄

*/

+ (NSString *)getTmpDirectory;

#pragma mark - 清除沙盒目錄文件內容 -

/**

根據路徑返回目錄或文件的大小

@param path 文件目錄

@return 目錄文件大小

*/

+ (CGFloat)sizeWithFilePath:(NSString *)path;

/**

得到指定目錄下的所有文件

@param dirPath 指定目錄

@return 所有文件

*/

+ (NSArray *)getAllFileNames:(NSString *)dirPath;

/**

刪除指定目錄或文件

@param path 指定目錄或文件

@return 刪除結果

*/

+ (BOOL)clearCachesWithFilePath:(NSString *)path;

/**

清空指定目錄下文件

@param dirPath 指定目錄

@return 清除結果

*/

+ (BOOL)clearCachesFromDirectoryPath:(NSString *)dirPath;

/**

清理圖片緩存

@return 圖片緩存

*/

+ (void)clearCachesImage;

/**

清理網頁緩存

@return 網頁緩存

*/

+ (BOOL)clearCachesWeb;

/**

清理信息類

@return 信息類緩存

*/

+ (BOOL)clearCachesInfo;

/** 清理所有緩存 */

+ (void)clearAllCaches;

/**

獲得緩存大小

@return 緩存大小

*/

+ (NSUInteger)getCachesSize;

/**

獲取緩存大小字符串

@return 緩存大小字符串

*/

+ (NSString *)getCachesSizeString;

/** 創建cache/User文件夾 */

+ (void)createUserCacheFile;

/** 獲取cache/User文件夾路徑 */

+ (NSString *)getCacheUserPath;

#pragma mark - 緩存歸檔與解檔 -

/** 歸檔群組列表 */

+ (void)archiveGroupList:(NSMutableArray *)groupArr;

/** 歸檔活動列表 */

+ (void)archiveActivityList:(NSMutableArray *)actArr;

/** 載入群組列表緩存 */

+ (NSMutableArray *)unarchiveGroupList;

/** 載入活動列表緩存 */

+ (NSMutableArray *)unachiveActivityList;



#import "LZSandBoxManager.h"

#import "SDImageCache.h"

#define FILE_CACHE_USER                @"User"

#define FILE_CACHE_WebKit              @"WebKit"

#define FILE_Group_list                @"GroupList.plist"      // 群組列表

#define FILE_Activity_list             @"ActivityList.plist"    // 群組列表

@implementation LZSandBoxManager

+ (NSFileManager *)initFileManager {

NSFileManager *manager;

if (manager == nil) {

manager = [NSFileManager defaultManager];

}

return manager;

}

#pragma mark - 獲取沙盒目錄 -

/** 獲取沙盒Document目錄 */

+ (NSString *)getDocumentDirectory {

return NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];

}

/** 獲取沙盒Liabrary目錄 */

+ (NSString *)getLibraryDirectory {

return NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES)[0];

}

/** 獲取沙盒Library/Caches目錄 */

+ (NSString *)getCachesDirectory {

return NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];

}

/** 獲取沙盒Preference目錄 */

+ (NSString *)getPreferenceDirectory {

return NSSearchPathForDirectoriesInDomains(NSPreferencePanesDirectory, NSUserDomainMask, YES)[0];

}

/** 獲取沙盒Tmp目錄 */

+ (NSString *)getTmpDirectory {

return NSTemporaryDirectory();

}

#pragma mark - 清除沙盒目錄文件內容 -

/** 根據路徑返回目錄或文件的大小 */

+ (CGFloat)sizeWithFilePath:(NSString *)path {

// 1.獲得文件管理權限

NSFileManager *manager = [self initFileManager];

// 2.檢測路徑合理性

BOOL directory = NO;

BOOL exist = [manager fileExistsAtPath:path isDirectory:&directory];

if (!exist) return 0;

// 3.判斷是否為文件夾

// 文件夾

if (directory) {

// 這個方法能獲得這個文件夾下面的所有子路徑(直接\間接子路徑)

NSArray *subPaths = [manager subpathsAtPath:path];

int totalSize = 0;

for (NSString *subPath in subPaths) {

NSString *fullSubPath = [path stringByAppendingPathComponent:subPath]; // 拼出子目錄的全路徑

BOOL directory = NO;

[manager fileExistsAtPath:fullSubPath isDirectory:&directory];

// 子路徑是個文件

if (!directory) {

NSDictionary *attrs = [manager attributesOfItemAtPath:fullSubPath error:nil];

totalSize += [attrs[NSFileSize] intValue];

}

}

return totalSize / (1024*1024.0);

}

// 文件

else  {

NSDictionary *attrs = [manager attributesOfItemAtPath:path error:nil];

return [attrs[NSFileSize] intValue] / (1024*1024.0);

}

}

/** 得到指定目錄下的所有文件 */

+ (NSArray *)getAllFileNames:(NSString *)dirPath {

NSArray *files = [[self initFileManager] subpathsOfDirectoryAtPath:dirPath error:nil];

return files;

}

/** 刪除指定目錄或文件 */

+ (BOOL)clearCachesWithFilePath:(NSString *)path {

return [[self initFileManager] removeItemAtPath:path error:nil];

}

/** 清空指定目錄下文件 */

+ (BOOL)clearCachesFromDirectoryPath:(NSString *)dirPath {

// 獲得全部文件數組

NSArray *fileArr = [self getAllFileNames:dirPath];

BOOL flag = NO;

for (NSString *fileName in fileArr) {

NSString *filePath = [dirPath stringByAppendingPathComponent:fileName];

flag = [self clearCachesWithFilePath:filePath];

if (!flag) {

break;

}

}

return flag;

}

/** 清理圖片緩存 */

+ (void)clearCachesImage {

SDImageCache *sdCache = [SDImageCache sharedImageCache];

[sdCache clearDisk];

}

/** 清理網頁緩存 */

+ (BOOL)clearCachesWeb {

NSString *path = [[self getCachesDirectory] stringByAppendingPathComponent:FILE_CACHE_WebKit];

return [self clearCachesWithFilePath:path];

}

/** 清理信息類緩存 */

+ (BOOL)clearCachesInfo {

return [self clearCachesWithFilePath:[self getCacheUserPath]];

}

/** 清理所有緩存 */

+ (void)clearAllCaches {

[self clearCachesImage];

[self clearCachesWeb];

[self clearCachesInfo];

}

/** 獲取緩存大小 */

+ (NSUInteger)getCachesSize {

NSUInteger totalSize = 0;

// 1.動態草稿

// 2.SDWebImage緩存大小

SDImageCache *sdCache = [SDImageCache sharedImageCache];

NSUInteger sdCacheSize = [sdCache getSize];

// 3.用戶瀏覽信息列表緩存

NSArray *filesArr = [self getAllFileNames:[self getCacheUserPath]];

NSUInteger infoSize = 0;

for (NSString *filePath in filesArr) {

NSString *filePathAppend = [[self getCacheUserPath] stringByAppendingPathComponent:filePath];

NSData *data = [NSData dataWithContentsOfFile:filePathAppend];

infoSize += data.length;

}

// 4.WebKit緩存

NSString *webKitPath = [[self getCachesDirectory] stringByAppendingPathComponent:FILE_CACHE_WebKit];

NSArray *webFileArr = [self getAllFileNames:webKitPath];

NSUInteger webSize = 0;

for (NSString *filePath in webFileArr) {

NSString *filePathAppend = [webKitPath stringByAppendingPathComponent:filePath];

NSData *data = [NSData dataWithContentsOfFile:filePathAppend];

webSize += data.length;

}

totalSize = sdCacheSize + infoSize + webSize;

return totalSize;

}

/** 獲取緩存大小字符串 */

+ (NSString *)getCachesSizeString {

NSUInteger cacheSize =  [self getCachesSize] / 1024 / 1024;

if (cacheSize == 0) return nil;

NSString *cacheSizeStr = cacheSize >= 1 ? [NSString stringWithFormat:@"%luM", (unsigned long)cacheSize] : [NSString stringWithFormat:@"%luK", (unsigned long)cacheSize];

return cacheSizeStr;

}

/** 創建cache/User文件夾 */

+ (void)createUserCacheFile {

NSFileManager *fm = [self initFileManager];

NSString *path = [[self getCachesDirectory] stringByAppendingPathComponent:FILE_CACHE_USER];

if (![fm fileExistsAtPath:path]) {

[fm createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];

} else

NSLog(@"File path Cache/User has been existed !");

}

/** 獲取cache/User文件夾路徑 */

+ (NSString *)getCacheUserPath {

NSString *userPath = [[self getCachesDirectory] stringByAppendingPathComponent:FILE_CACHE_USER];

return userPath;

}

#pragma mark - 緩存歸檔與解檔 -

/** 歸檔群組列表 */

+ (void)archiveGroupList:(NSMutableArray *)groupArr {

[self createUserCacheFile];

NSString *path = [[LZSandBoxManager getCacheUserPath] stringByAppendingPathComponent:FILE_Group_list];

[NSKeyedArchiver archiveRootObject:groupArr toFile:path];

}

/** 歸檔活動列表 */

+ (void)archiveActivityList:(NSMutableArray *)actArr {

[self createUserCacheFile];

NSString *path = [[LZSandBoxManager getCacheUserPath] stringByAppendingPathComponent:FILE_Activity_list];

[NSKeyedArchiver archiveRootObject:actArr toFile:path];

}

/** 載入群組列表緩存 */

+ (NSMutableArray *)unarchiveGroupList {

NSString *path = [[LZSandBoxManager getCacheUserPath] stringByAppendingPathComponent:FILE_Group_list];

NSMutableArray *array = [NSKeyedUnarchiver unarchiveObjectWithFile:path];

return array;

}

/** 載入活動列表緩存 */

+ (NSMutableArray *)unachiveActivityList {

NSString *path = [[LZSandBoxManager getCacheUserPath] stringByAppendingPathComponent:FILE_Activity_list];

NSMutableArray *array = [NSKeyedUnarchiver unarchiveObjectWithFile:path];

return array;

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,622評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,716評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,746評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,991評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,706評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,036評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,029評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,203評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,725評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,451評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,677評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,161評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,857評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,266評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,606評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,407評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,643評論 2 380

推薦閱讀更多精彩內容