•IOS 應用目錄簡介
iOS的沙盒機制,應用隻能通路自己應用目錄下的檔案。iOS不像android,沒有SD卡概念,不能直接通路圖像、視訊等内容。iOS應用産生的内容,如圖像、檔案、緩存内容等都必須存儲在自己的沙盒内。預設情況下,每個沙盒含有3個檔案夾:Documents, Library和 tmp。Library包含Caches、Preferences目錄。
- Documents:應用中使用者資料可以放在這裡,iTunes備份和恢複的時候會包括此目錄
- tmp:存放臨時檔案,iTunes不會備份和恢複此目錄,此目錄下檔案可能會在應用退出後删除
- Library/Caches:存放緩存檔案,iTunes不會備份此目錄,此目錄下檔案不會在應用退出删除
![]()
IOS 建立目錄/檔案夾•IOS 應用目錄簡介 •IOS NSFileManager檔案操作
•IOS 擷取應用沙盒目錄
關于定位應用目錄主要用到了NSSearchPathForDirectoriesInDomains 和 NSHomeDirectory();
1、NSSearchPathForDirectoriesInDomains 定位到沙盒的Document、Library以及Caches 目錄
(1)、定位Document 目錄
NSString * docsdir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
(2)、定位Library 目錄
NSString * docsdir = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0];
(3)、定位Caches 目錄,Caches 目錄位于Library目錄下
NSString * docsdir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];
2、定位到tem目錄的方法
使用NSSearchPathForDirectoriesInDomains隻能定位Caches、Library、Documents目錄, tmp目錄,不能按照此方法獲得,此時可以采用NSHomeDirectory定位到應用程式主目錄,也就是Document 的上一層目錄
NSString *temp = NSTemporaryDirectory();
3、擷取沙盒根目錄:NSHomeDirectory()
使用 NSHomeDirectory () 可以擷取到沙盒的根目錄,也就是 Document 的上一層。 利用 NSHomeDirectory () 我們可以擷取沙盒中的任意檔案的路徑 。 例如:擷取tmp的路徑如下所示:
NSString *filePath=[NSHomeDirectory() stringByAppendingPathComponent:@"tmp"];
•IOS NSFileManager檔案操作
還是直接上代碼吧!
#pragma mark 使用NSSearchPathForDirectoriesInDomains建立檔案目錄
- (void) createDir {
// NSDocumentDirectory 沙盒 Documents 目錄
// NSLibraryDirectory 沙盒 Library 目錄
// NSCachesDirectory 沙盒 Library/Caches 目錄
// 使用NSSearchPathForDirectoriesInDomains隻能定位Caches、Library、Documents目錄,tmp目錄,不能按照此方法獲得
NSString * docsdir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *dataFilePath = [docsdir stringByAppendingPathComponent:@"head"]; // 在指定目錄下建立 "head" 檔案夾
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL isDir = NO;
// fileExistsAtPath 判斷一個檔案或目錄是否有效,isDirectory判斷是否一個目錄
BOOL existed = [fileManager fileExistsAtPath:dataFilePath isDirectory:&isDir];
if ( !(isDir == YES && existed == YES) ) {
// 在 Document 目錄下建立一個 head 目錄
[fileManager createDirectoryAtPath:dataFilePath withIntermediateDirectories:YES attributes:nil error:nil];
}
NSLog(@"+++++++++++++++++++%@",dataFilePath);
}
#pragma mark 使用 NSHomeDirectory() 建立檔案目錄
- (void) createDir {
// NSHomeDirectory():應用程式目錄, @"tmp/temp":在tmp檔案夾下建立temp 檔案夾
NSString *filePath=[NSHomeDirectory() stringByAppendingPathComponent:@"tmp/temp"];
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL isDir = NO;
// fileExistsAtPath 判斷一個檔案或目錄是否有效,isDirectory判斷是否一個目錄
BOOL existed = [fileManager fileExistsAtPath:filePath isDirectory:&isDir];
if ( !(isDir == YES && existed == YES) ) {
// 在 tmp 目錄下建立一個 temp 目錄
[fileManager createDirectoryAtPath:filePath withIntermediateDirectories:YES attributes:nil error:nil];
}
NSLog(@"+++++++++++++++++++%@",filePath);
}
關于目錄/檔案的其他操作
#pragma mark fileManager 的其他操作
- (void) fileManager:(NSString *) filePath { // filePath: 檔案/目錄的路徑
NSFileManager *fileManager = [NSFileManager defaultManager];
// 取得一個目錄下得所有檔案名
NSArray *files = [fileManager subpathsAtPath:filePath];
// 讀取某個檔案
NSData *data = [fileManager contentsAtPath:filePath];
// 删除檔案/檔案夾
[fileManager removeItemAtPath:filePath error:nil];
}
轉載請指明出處:點選打開連結