iOS的沙箱機制,應用只能訪問自己應用目錄下的檔案。iOS不像android,沒有SD卡概念,不能直接存取映像、視頻等內容。iOS應用產生的內容,像、檔案、緩衝內容等都必須儲存在自己的沙箱內。預設情況下,每個沙箱含有3個檔案夾:Documents, Library 和 tmp。Library包含Caches、Preferences目錄。
上面的完整路徑為:使用者->資產庫->Application Support->iPhone Simulator->6.1->Aplications
Documents:蘋果建議將程式建立產生的檔案以及應用瀏覽產生的檔案資料儲存在該目錄下,iTunes備份和恢複的時候會包括此目錄
Library:儲存程式的預設設定或其它狀態資訊;
Library/Caches:存放快取檔案,儲存應用的持久化資料,用於應用升級或者應用關閉後的資料儲存,不會被itunes同步,所以為了減少同步的時間,可以考慮將一些比較大的檔案而又不需要備份的檔案放到這個目錄下。
tmp:提供一個即時建立臨時檔案的地方,但不需要持久化,在應用關閉後,該目錄下的資料將刪除,也可能系統在程式不啟動並執行時候清除。
APP Sandbox
iOS怎麼擷取沙箱路徑,怎麼操作檔案呢?下面給出答案。
擷取應用沙箱根路徑:
-(void)dirHome{ NSString *dirHome=NSHomeDirectory(); NSLog(@"app_home: %@",dirHome);}
擷取Documents目錄路徑:
//擷取Documents目錄-(NSString *)dirDoc{ //[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);NSString *documentsDirectory = [paths objectAtIndex:0]; NSLog(@"app_home_doc: %@",documentsDirectory); return documentsDirectory;}
擷取Library目錄路徑:
//擷取Library目錄-(void)dirLib{ //[NSHomeDirectory() stringByAppendingPathComponent:@"Library"]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES); NSString *libraryDirectory = [paths objectAtIndex:0]; NSLog(@"app_home_lib: %@",libraryDirectory);}
擷取Cache目錄路徑:
//擷取Cache目錄-(void)dirCache{ NSArray *cacPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); NSString *cachePath = [cacPath objectAtIndex:0]; NSLog(@"app_home_lib_cache: %@",cachePath);}
擷取Tmp目錄路徑:
//擷取Tmp目錄-(void)dirTmp{ //[NSHomeDirectory() stringByAppendingPathComponent:@"tmp"]; NSString *tmpDirectory = NSTemporaryDirectory(); NSLog(@"app_home_tmp: %@",tmpDirectory);}
建立檔案夾:
//建立檔案夾-(void *)createDir{ NSString *documentsPath =[self dirDoc]; NSFileManager *fileManager = [NSFileManager defaultManager]; NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"]; // 建立目錄 BOOL res=[fileManager createDirectoryAtPath:testDirectory withIntermediateDirectories:YES attributes:nil error:nil]; if (res) { NSLog(@"檔案夾建立成功"); }else NSLog(@"檔案夾建立失敗"); }
建立檔案
//建立檔案-(void *)createFile{ NSString *documentsPath =[self dirDoc]; NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"]; NSFileManager *fileManager = [NSFileManager defaultManager]; NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"]; BOOL res=[fileManager createFileAtPath:testPath contents:nil attributes:nil]; if (res) { NSLog(@"檔案建立成功: %@" ,testPath); }else NSLog(@"檔案建立失敗");}
寫資料到檔案:
//寫檔案-(void)writeFile{ NSString *documentsPath =[self dirDoc]; NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"]; NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"]; NSString *content=@"測試寫入內容!"; BOOL res=[content writeToFile:testPath atomically:YES encoding:NSUTF8StringEncoding error:nil]; if (res) { NSLog(@"檔案寫入成功"); }else NSLog(@"檔案寫入失敗");}
讀檔案資料:
//讀檔案-(void)readFile{ NSString *documentsPath =[self dirDoc]; NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"]; NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"];// NSData *data = [NSData dataWithContentsOfFile:testPath];// NSLog(@"檔案讀取成功: %@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]); NSString *content=[NSString stringWithContentsOfFile:testPath encoding:NSUTF8StringEncoding error:nil]; NSLog(@"檔案讀取成功: %@",content);}
檔案屬性:
//檔案屬性-(void)fileAttriutes{ NSString *documentsPath =[self dirDoc]; NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"]; NSFileManager *fileManager = [NSFileManager defaultManager]; NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"]; NSDictionary *fileAttributes = [fileManager attributesOfItemAtPath:testPath error:nil]; NSArray *keys; id key, value; keys = [fileAttributes allKeys]; int count = [keys count]; for (int i = 0; i < count; i++) { key = [keys objectAtIndex: i]; value = [fileAttributes objectForKey: key]; NSLog (@"Key: %@ for value: %@", key, value); }}
刪除檔案:
//刪除檔案-(void)deleteFile{ NSString *documentsPath =[self dirDoc]; NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"]; NSFileManager *fileManager = [NSFileManager defaultManager]; NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"]; BOOL res=[fileManager removeItemAtPath:testPath error:nil]; if (res) { NSLog(@"檔案刪除成功"); }else NSLog(@"檔案刪除失敗"); NSLog(@"檔案是否存在: %@",[fileManager isExecutableFileAtPath:testPath]?@"YES":@"NO");}
/**
* @author 張興業* http://blog.csdn.net/xyz_lmn* iOS入門群:83702688
* android開發進階群:241395671
* 我的新浪微博:@張興業TBOW* 我的郵箱:xy-zhang#163.com(#->@)*/
https://developer.apple.com/library/ios/#documentation/FileManagement/Conceptual/FileSystemProgrammingGUide/FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW2