每個iOS應用都有自己的應用沙盒(應用沙盒就是文件系統(tǒng)目錄)缩滨,與其他文件系統(tǒng)隔離翘县。應用必須待在自己的沙盒里帜羊,其他應用不能訪問該沙盒。沙盒下的目錄如下:
Application:
存放程序源文件,上架前經過數字簽名箫柳,上架后不可修改
Documents: 保存應?運行時生成的需要持久化的數據,iTunes同步設備時會備份該目錄手形。例如,游戲應用可將游戲存檔保存在該目錄
tmp:
?保存應?運行時所需的臨時數據,使?完畢后再將相應的文件從該目錄刪除。應用 沒有運行時,系統(tǒng)也可能會清除該目錄下的文件悯恍。iTunes同步設備時不會備份該目錄库糠。
Library/Caches:
?保存應用運行時?成的需要持久化的數據,iTunes同步設備時不會備份 該目錄。?一般存儲體積大涮毫、不需要備份的非重要數據瞬欧,比如網絡數據緩存存儲到Caches下
Library/Preference:
?保存應用的所有偏好設置,如iOS的Settings(設置) 應?會在該目錄中查找應?的設置信息罢防。iTunes同步設備時會備份該目錄.// 偏好設置是專門用來保存應用程序的配置信息的比如保存用戶名艘虎、密碼、字體大小等設置, 一般情況不要再偏好設置中保存其他數據
// 如果利用系統(tǒng)的偏好設置來存儲數據, 默認就是存儲在Preferences文件夾下面的
// 偏好設置會將所有的數據保存到同一個文件中
NSUserDefaults* defalts = [NSUserDefaults standardUserDefaults];
// 保存數據(如果設置數據之后沒有同步, 會在將來某一時間點自動將數據保存到Preferences文件夾下面)
[defalts setObject:@"123" forKey:@"key"];
// 讓NSUserDefaults立刻保存數據 注意:UserDefaults設置數據時咒吐,不是立即寫入野建,而是根據時間戳定時地把緩存中的數據寫入本地磁盤。所以調用了set方法之后數據有可能還沒有寫入磁盤應用程序就終止了恬叹。出現以上問題候生,可以通過調用synchornize方法強制寫入
[defalts synchronize];//如果要立刻保存就需要這行代碼
下面為關于沙盒的代碼小總結:
#import<Foundation/Foundation.m>
/*
文件管理
*/
@interface ZBFile : NSObject
/*
* @brief 應用程序主目錄
* @return 主目錄路徑
*/
+ (NSString *)fileHomeDirectory;
/*
* @brief? Resource目錄
* @return Resource目錄路徑
*/
+ (NSString *)fileResourceDirectory;
/*
* @brief Docunmets目錄
* @return Docunmets目錄路徑
*/
+ (NSString *)fileDocumentsDirectory;
/*
* @brief Caches 目錄
* @return Caches 目錄路徑
*/
+ (NSString *)fileCachesDirectory;
/*
* @brief tmp目錄
* @return tmp目錄路徑
*/
+ (NSString *)fileTemporaryDirectory;
/**
* @brief Resource + path路徑.
*
* @param path 相對路徑.
*
* @return Resource + path完整路徑.
*/
+ (NSString *)fileResourceDirectory:(NSString *)path;
/**
* @brief Documents + path路徑.
*
* @param path 相對路徑.
*
* @return Documents + path完整路徑.
*/
+ (NSString *)fileDocumentsDirectory:(NSString *)path;
/**
* @brief Caches + path路徑.
*
* @param path 相對路徑.
*
* @return Caches + path完整路徑.
*/
+ (NSString *)fileCachesDirectory:(NSString *)path;
/**
* @brief tmp + path路徑.
*
* @param path 相對路徑.
*
* @return tmp + path完整路徑.
*/
+ (NSString *)fileTempDirectory:(NSString *)path;
/**
* @brief 創(chuàng)建path目錄或文件.
*
* @param path 目錄或文件路徑.
*
* @return 是否創(chuàng)建成功.
*/
+ (BOOL)fileCreateDirectory:(NSString *)path;
/**
* @brief 目錄或文件是否存在.
*
* @param path 目錄或文件路徑.
*
* @return 目錄或文件是否存在.
*/
+ (BOOL)fileExistAtPath:(NSString *)path;
/**
* @brief 保存data到path目錄.
*
* @param path 保存目錄.
* @param data 待保存數據.
*
* @return 寫文件是否成功.
*/
+ (BOOL)fileWriteAtPath:(NSString *)path data:(NSData *)data;
/**
* @brief 刪除目錄或文件.
*
* @param path 待刪除目錄或文件.
*
* @return 目錄或文件是否刪除成功.
*/
+ (BOOL)fileDelete:(NSString *)path;
/**
* @brief 查詢path目錄子文件名稱.
*
* @param path 待查詢目錄.
*
* @return 子文件名稱列表
*/
+ (NSArray *)fileSubFileNames:(NSString *)path;
/**
* @brief 拷貝fromPath文件或目錄到toPath目錄下.
*
* @param fromPath 源文件或目錄.
* @param toPath 保存文件或目錄路徑.
*
* @return 是否拷貝成功.
*/
+ (BOOL)fileCopy:(NSString *)fromPath toPath:(NSString *)toPath;
/**
*? @brief 獲取數據庫所有文件大小
*
*? @return 文件大小 單位M
*
*/
+ (float)getAllDataBaseSize;
/**
*
*
*? @brief? 清除所有緩存
*/
+(void)removeAllCaches;
/**
*
*? @brief? 獲取所有的緩存大小
*
*? @return 緩存大小 單位為M
*/
+(float)getAllCaches;
/**
*
*? @brief? 獲取單個文件大小
*
*? @return 大小 單位為M
*/
+ (long long)fileSizeAtPath:(NSString *)filePath;
/**
*
*? @brief? 獲取某一目錄大小
*
*? @return 大小 單位為M
*/
+(long long)filesSizeAtPath:(NSString *)filePath;
/**
*
*
*? @brief? 清除所有創(chuàng)建的文件
*/
+ (void)removeAll;
@end
-----------------------------------------------------------------------
#import "ZBFile.h"
@implementation ZBFile
#pragma mark----應用程序主目錄路徑
+ (NSString *)fileHomeDirectory{
NSString* homeDir = NSHomeDirectory();
return homeDir;
}
#pragma mark----Resource目錄路徑
+ (NSString *)fileResourceDirectory{
NSString* resDir = [[NSBundle mainBundle]resourcePath];
return resDir;
}
#pragma mark--- Documents目錄路徑.
+ (NSString *)fileDocumentsDirectory{
NSString* docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
return docDir;
}
#pragma mark---Caches目錄路徑
+ (NSString *)fileCachesDirectory{
NSString* cachDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
return cachDir;
}
#pragma mark--- tmp目錄路徑
+ (NSString *)fileTemporaryDirectory{
NSString* temDir = NSTemporaryDirectory();
return temDir;
}
#pragma mark--- Resource + path完整路徑.
+ (NSString *)fileResourceDirectory:(NSString *)path{
NSString* returnStr = [[ZBFile fileResourceDirectory]stringByAppendingPathComponent:path];
return returnStr;
}
#pragma mark --Documents + path完整路徑
+ (NSString *)fileDocumentsDirectory:(NSString *)path{
NSString* returnStr = [[ZBFile fileDocumentsDirectory]stringByAppendingPathComponent:path];
return returnStr;
}
#pragma mark -- Caches + path完整路徑
+ (NSString *)fileCachesDirectory:(NSString *)path{
NSString* returnStr = [[ZBFile fileCachesDirectory]stringByAppendingPathComponent:path];
return returnStr;
}
#pragma mark -- tmp + path完整路徑
+ (NSString *)fileTempDirectory:(NSString *)path{
NSString* returnStr = [[ZBFile fileTemporaryDirectory]stringByAppendingPathComponent:path];
return returnStr;
}
#pragma mark -- 是否存在
+ (BOOL)fileExistAtPath:(NSString *)path
{
NSFileManager* fileManager = [NSFileManager defaultManager];
return [fileManager fileExistsAtPath:path];
}
#pragma mark -- 是否創(chuàng)建成功
+ (BOOL)fileCreateDirectory:(NSString *)path{
NSFileManager* fileManager = [NSFileManager defaultManager];
NSError* error;
return [fileManager createDirectoryAtPath:path withIntermediateDirectories:NO attributes:nil error:&error];
}
#pragma mark -- 是否寫入
+ (BOOL)fileWriteAtPath:(NSString *)path data:(NSData *)data{
return [data writeToFile:path atomically:YES];
}
#pragma mark---是否刪除
+ (BOOL)fileDelete:(NSString *)path{
NSFileManager* fileManager = [NSFileManager defaultManager];
NSError* error;
return [fileManager removeItemAtPath:path error:&error];
}
#pragma mark--查詢path目錄子文件名稱
+ (NSArray *)fileSubFileNames:(NSString *)path{
NSFileManager* fileManager = [NSFileManager defaultManager];
NSError* error;
return [fileManager contentsOfDirectoryAtPath:path error:&error];
}
#pragma mark--拷貝fromPath文件或目錄到toPath目錄下
+ (BOOL)fileCopy:(NSString *)fromPath toPath:(NSString *)toPath{
NSFileManager* fileManager = [NSFileManager defaultManager];
NSError* error;
return [fileManager copyItemAtPath:fromPath toPath:toPath error:&error];
}
#pragma mark----獲取數據庫所有文件大小
+ (float)getAllDataBaseSize{
long long folderSize= 0;
folderSize = [ZBFile filesSizeAtPath:[ZBFile fileTemporaryDirectory]] + [ZBFile filesSizeAtPath:[ZBFile fileCachesDirectory]] +[ZBFile filesSizeAtPath:[ZBFile fileResourceDirectory]] +[ZBFile filesSizeAtPath:[ZBFile fileDocumentsDirectory]];
return folderSize;
}
#pragma mark----獲取目錄大小--
+(long long)filesSizeAtPath:(NSString *)filePath{
NSFileManager* fileManager = [NSFileManager defaultManager];
NSEnumerator *childFilesEnumerator = [[fileManager subpathsAtPath:filePath] objectEnumerator];
NSString* fileName;
long long folderSize = 0;
while ((fileName = [childFilesEnumerator nextObject]) != nil){
NSString* fileAbsolutePath = [filePath stringByAppendingPathComponent:fileName];
folderSize += [ZBFile fileSizeAtPath:fileAbsolutePath];
}
return folderSize/(1024.0*1024.0);
}
#pragma mark----獲取單個文件大小
+ (long long)fileSizeAtPath:(NSString *)filePath{
NSFileManager* manager = [NSFileManager defaultManager];
if ([manager fileExistsAtPath:filePath]){
return [[manager attributesOfItemAtPath:filePath error:nil] fileSize];
}
return 0;
}
#pragma mark----獲取所有緩存大小-單位M
+(float)getAllCaches{
long long folderSize= 0;
folderSize = [ZBFile filesSizeAtPath:[ZBFile fileCachesDirectory]];
return folderSize;
}
#pragma mark----某一目錄下的文件
+ (void)removeDirCaches:(NSString *)path{
NSFileManager *manager = [NSFileManager defaultManager];
NSEnumerator *childFilesEnumerator = [[manager subpathsAtPath:path] objectEnumerator];
NSString* fileName;
while ((fileName = [childFilesEnumerator nextObject]) != nil){
NSString* fileAbsolutePath = [path stringByAppendingPathComponent:fileName];
[manager removeItemAtPath:fileAbsolutePath error:NULL];
}
}
#pragma mark----清除所有緩存
+(void)removeAllCaches{
[ZBFile removeDirCaches:[ZBFile fileCachesDirectory]];
}
+ (void)removeAll{
[ZBFile removeDirCaches:[ZBFile fileDocumentsDirectory]];
[ZBFile removeDirCaches:[ZBFile fileResourceDirectory]];
[ZBFile removeDirCaches:[ZBFile fileCachesDirectory]];
[ZBFile removeDirCaches:[ZBFile fileTemporaryDirectory]];
}
@end