iOS SDK詳解之NSFileManager

來源:互聯網
上載者:User

iOS SDK詳解之NSFileManager

 

前言: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];
 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.