前言:NSFileManager提供了一種方便的方式進行文件操作,包括文件和目錄的創建,拷貝,剪切,刪除等。
本文會詳細講解如何進行這些最基本的操作。
說白了,就是獲取一些目錄。主要就是兩個函數
只是定位
- 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 - 用戶域兩個函數
第二個函數還有一個額外輸出,如果這個文件存在的話,會給出這個文件是不是目錄文件
- 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];