沙盒操做
沙盒文件
每一個ios應用都有本身的應用沙盒,應用沙盒就是文件系統目錄,與其餘應用的文件系統隔離,ios系統不容許訪問其餘應用的應用沙盒。在ios8中已經開放訪問。
應用沙盒通常包括如下幾個文件目錄:應用程序包、Documents、Libaray(下面有Caches和Preferences目錄)、tmp。
應用程序包:包含全部的資源文件和可執行文件。
Documents:保存應用運行時生成的須要持久化的數據,iTunes會自動備份該目錄。蘋果建議將程序中創建的或在程序中瀏覽到的文件數據保存在該目錄下,iTunes備份和恢復的時候會包括此目錄
tmp:保存應用運行時所需的臨時數據,使用完畢後再將相應的文件從該目錄刪除。應用沒有運行時,系統也有可能會清除該目錄下的文件,iTunes不會同步該目錄。iphone重啓時,該目錄下的文件會丟失。
Library:存儲程序的默認設置和其餘狀態信息,iTunes會自動備份該目錄。
Libaray/Caches:存放緩存文件,iTunes不會備份此目錄,此目錄下文件不會在應用退出刪除。通常存放體積比較大,不是特別重要的資源。
Libaray/Preferences:保存應用的全部偏好設置,ios的Settings(設置)應用會在該目錄中查找應用的設置信息,iTunes會自動備份該目錄。
沙盒文件目錄獲取代碼:
//Home目錄NSString *homeDirectory = NSHomeDirectory();
//Document目錄NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];
//Cache目錄NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];
//Libaray目錄NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];
//tmp目錄
NSString *tmpDir = NSTemporaryDirectory();
文件夾操做
建立文件夾:
沙 盒文件夾操做使用系統Foundation框架下的NSFileManager文件操做類實現。在沙盒中新建文件夾,需指定新建文件夾的絕對路徑,而後手 動建立。而且要保證新建文件夾的上級路徑已經存在,不然須要先建立上級文件夾路徑。文件夾的建立使用createDirectoryAtPath方 法。
新建文件夾代碼:
if ([[NSFileManager defaultManager] fileExistsAtPath:createPath])//判斷createPath路徑文件夾是否已存在,此處createPath爲須要新建的文件夾的絕對路徑
{
return NO;
}
else
{
[[NSFileManager defaultManager] createDirectoryAtPath:createPath withIntermediateDirectories:YES attributes:nil error:nil];// 建立文件夾
return YES;
}
pS:如何保證新建文件夾的父親文件夾已經存在,ios的Foundation框架中的NSPathUtilities類中提供了一些操做路徑string的方法。
stringByDeletingLastPathComponent :去掉路徑中的最後一級成員
好比pp/ppp/pppp 操做事後則爲:pp/ppp
pathComponents :拆分路徑
好比pp/ppp/pppp 執行後獲得一個NSArray數組,裏面有三個元素爲pp ppp pppp。
lastPathComponent :獲取路徑中的最後一級文件名
相關方法還有不少,可參考NSPathUtilities類。
刪除文件夾:
刪除文件夾,需先斷定該文件夾是否存在(使用fileExistsAtPath方法),若是存在,執行刪除操做(使用removeItemAtPath)。
刪除文件夾代碼:
if([[NSFileManager defaultManager] fileExistsAtPath:pathFull])//若是存在臨時文件的配置文件
{
[[NSFileManager defaultManager] removeItemAtPath:pathFull error:&error];
}
移動文件夾:
文件夾移動須要兩個參數,文件夾原絕對路徑與目標絕對路徑。使用moveItemAtPath 方法實現
移動文件夾代碼:
if([fileManager moveItemAtPath:prePath toPath:cenPath error:&error]!=YES)// prePath 爲原路徑、 cenPath 爲目標路徑
{
NSLog(@"移動文件失敗");
}
else
{
NSLog(@"移動文件成功");
}
PS:文件夾移動須要注意的是,要確保目標路徑中除了目標文件夾以外的路徑確實存在。不然移動到一個尚未建立的文件夾下,是會失敗的,這和建立文件夾是同樣的。
重命名文件夾:
重命名文件夾也須要兩個參數,原絕對路徑與目標絕對路徑,用了一個偷換概念的方式來實現,其實用的是移動文件夾的方法。不贅述。
獲取目錄下的全部文件名稱(包括文件夾與文件):
NSArray *fileNameList=[[NSFileManager defaultManager] contentsOfDirectoryAtPath:imagesFolder error:nil];// fileNameList中即爲該imagesFolder文件夾下的全部文件的名稱數組
文件操做:
寫入文件:
寫入文件須要首先斷定該文件的父親文件夾是否存在,存在則能夠進行寫入,不然需首先建立父親
路徑。使用writeToFile方法。寫入文件的同時,系統會自動建立文件。
通常數據類型,好比數組、字典、NSData、NSString均可以直接調用writeToFile方法寫入文件。
代碼: [arrayA writeToFile:filePath atomically:YES];
也能夠手動建立文件:
[fileManager createFileAtPath:destinationPath contents:[string dataUsingEncoding:NSUTF8StringEncoding] attributes:nil]
讀取文件:
若是用戶知道文件內容的數據類型比較規整,則能夠直接讀取文件內容到標準數據結構中。
NSArray *arrayA = [[NSArray alloc]initWithContentsOfFile:filePath]; html