天天看點

IOS 建立目錄/檔案夾•IOS 應用目錄簡介 •IOS NSFileManager檔案操作

•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];
}
           

轉載請指明出處:點選打開連結