你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS SDK詳解之NSFileManager

iOS SDK詳解之NSFileManager

編輯:IOS開發綜合

 


前言:NSFileManager提供了一種方便的方式進行文件操作,包括文件和目錄的創建,拷貝,剪切,刪除等。
本文會詳細講解如何進行這些最基本的操作。


要注意的幾點

使用defaultManager的時候,實際上獲取的是一個單例(同一個對象),是線程安全的,絕大多數時候,使用這個就可以了。本文講解基礎操作的時候,就使用這個。 如果在不同線程中使用,而且需要代理函數來監聽事件,這時候要使用init來創建每個線程獨立的fileManager

定位

說白了,就是獲取一些目錄。主要就是兩個函數
只是定位

- URLsForDirectory:inDomains:

舉例
獲取library目錄(默認存在)

  NSFileManager * fileManager = [NSFileManager defaultManager];
    NSArray * searchResult =  [fileManager URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask];
    NSURL * documentPath = [searchResult firstObject];
    NSLog(@%@,documentPath);

定位的時候可以創建

- URLForDirectory:inDomain:appropriateForURL:create:error:

獲取Application Support(默認不存在)

 NSFileManager * fileManager = [NSFileManager defaultManager];
    NSURL * path =  [fileManager URLForDirectory:NSApplicationSupportDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:nil];
    NSLog(@%@,path);

這裡要提到的幾個常用參數

NSLibraryDirectory - Library目錄 NSApplicationSupportDirectory - Library/Application Support目錄 NSDocumentDirectory - Document 目錄 NSUserDomainMask - 用戶域
至於,哪個域存儲什麼東西,參見我之前寫的關於沙盒的文章
http://blog.csdn.net/hello_hwc/article/details/44916909

判斷文件/目錄是否存在

兩個函數
第二個函數還有一個額外輸出,如果這個文件存在的話,會給出這個文件是不是目錄文件


- fileExistsAtPath:
- fileExistsAtPath:isDirectory:
       NSFileManager * fileManager = [NSFileManager defaultManager];
    NSArray * searchResult =  [fileManager URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask];
    NSURL * documentPath = [searchResult firstObject];
    NSString * newPath = [documentPath.path stringByAppendingPathComponent:@Demo/Wenchen];
    if ([fileManager fileExistsAtPath:newPath] == false) {
        NSLog(@Path not exist);
    }
    BOOL isDic;
    if ([fileManager fileExistsAtPath:documentPath.path isDirectory:&isDic] == false) {
        NSLog(@Path not exist);
    }
    NSLog(@%d,isDic);

創建

創建目錄
兩個函數參數類似,只不過第一個參數的類型不同

-createDirectoryAtURL:withIntermediateDirectories:attributes:error:
- createDirectoryAtPath:withIntermediateDirectories:attributes:error:

返回Bool來反映操作是否成功,如果出錯,錯誤信息在error裡

第二個參數代表是否自動創建不存在父目錄(也就是一次創建多層目錄)

第三個參數用來設置訪問權限,通常為nil

舉例

 NSFileManager * fileManager = [NSFileManager defaultManager];
    NSArray * searchResult =  [fileManager URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask];
    NSURL * documentPath = [searchResult firstObject];
    NSString * newPath = [documentPath.path stringByAppendingPathComponent:@Demo/Wenchen];
    if ([fileManager fileExistsAtPath:newPath] == false) {
        [fileManager createDirectoryAtPath:newPath withIntermediateDirectories:YES attributes:nil error:nil];
    }

然後,打開沙盒,看到了創建成功

這裡寫圖片描述


創建文件

使用函數
這裡的attributes除非想要設定一些讀寫權限,否則nil

- createFileAtPath:contents:attributes:
返回Bool來反映操作是否成功,如果出錯,錯誤信息在error裡

這個文件後面要用的

   NSFileManager * fileManager = [NSFileManager defaultManager];
    NSArray * searchResult =  [fileManager URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask];
    NSURL * documentPath = [searchResult firstObject];
    NSString * newPath = [documentPath.path stringByAppendingPathComponent:@Demo/Wenchen];
    if ([fileManager fileExistsAtPath:newPath] == false) {
        [fileManager createDirectoryAtPath:newPath withIntermediateDirectories:YES attributes:nil error:nil];
    }
    NSString * filePath = [newPath stringByAppendingPathComponent:@file.txt];
    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:@blog.csdn.net/hello_hwc];
    [fileManager createFileAtPath:filePath contents:data attributes:nil];

查看沙盒,確認創建成功
這裡寫圖片描述

注意,使用一些諸如writeToFile的時候,如果文件不存在,是會自動創建的。


拷貝/移動 文件

使用函數


- copyItemAtURL:toURL:error:
- copyItemAtPath:toPath:error:
- moveItemAtURL:toURL:error:
- moveItemAtPath:toPath:error:
返回Bool來反映操作是否成功,如果出錯,錯誤信息在error裡

舉例

  NSFileManager * fileManager = [NSFileManager defaultManager];
    NSURL * libraryPath =  [[fileManager URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask]firstObject];
    NSURL * documentPath = [[fileManager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask]firstObject];
    NSString * oldPath = [libraryPath.path stringByAppendingPathComponent:@Demo/Wenchen/file.txt];
    NSString * newPath = [documentPath.path stringByAppendingPathComponent:@file.txt];
    [fileManager copyItemAtPath:oldPath toPath:newPath error:nil];

查看沙盒,拷貝成功
這裡寫圖片描述


刪除

 NSFileManager * fileManager = [NSFileManager defaultManager];
    NSURL * documentPath = [[fileManager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask]firstObject];
    NSString * newPath = [documentPath.path stringByAppendingPathComponent:@file.txt];
   Bool success = [fileManager removeItemAtPath:newPath error:nil];
 
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved