- NSFileManager 物件執行一些有關目錄與檔案的操作
- 若需具有執行緒安全,需以 alloc 建立且以 NSFileManager 初始,不要用 +defaultManager 方法建立。
- 利用 moveItemAtPath 方法移動檔案,其 toPath 不能為一個已存在的目錄
NSFileManager 用於檔案操作的方法:
方法 | 說明 |
-(BOOL) createFileAtPath: (NSString *) path content: (NSData *) contents attributes: (NSDictionary *) attributes | 建立具有 contents 的內容,以及 attributes 屬性的檔案。若建立成功則回傳 YES,否則回傳 NO |
-(NSDictionary *) attributesOfItemAtPath: (NSString *) path error: (NSError **) error | 回傳 path 指定的檔案或目錄屬性,若過程有發生任何錯誤,則將錯誤訊息記錄於 error 物件 |
-(BOOL) removeItemAtPath: (NSString *) path error: (NSError **) error | 若成功刪除 path 指定的檔案、連結、目錄,則回傳 YES,否則將錯誤訊息記錄於 error 物件,並回傳 NO。(此方法將刪除所有子目錄中的內容) |
-(BOOL) moveItemAtPath: (NSString *) srcPath toPath: (NSString *) dstPath error: (NSError **) error | 將 srcPath 的檔案或目錄移至 dstPath,若移動成功,則回傳 YES,否則回傳 NO。(只有最後一層名稱不同的話,代表更改名稱) |
-(BOOL) fileExistsAtPath: (NSString *) path | 若 path 指定的檔案存在,則回傳 YES,否則回傳 NO |
NSFileManager 用於目錄操作的方法:
方法 | 說明 |
-(BOOL) createDirectoryAtPath: (NSString *) path attributes: (NSDictionary *) attributes error: (NSError **) error | 建立 path 指定的目錄,且此目錄具有 attributes 的屬性。若成功建立目錄,則回傳 YES,否則回傳 NO |
-(BOOL) changeCurrentDirectoryPath: (NSString *) path | 改變目前的目錄為 path |
-(NSString *) currentDirectoryPath | 回傳目前程式所在之路徑 |
-(NSDirectoryEnumerator *) enumeratorAtPath: (NSString *) path | 回傳 path 指定路徑的內容,內容包含檔案與目錄 |
-(BOOL)fileExistsAtPath (NSString *) path | 若 path 指定的檔案存在,則回傳 YES,否則回傳 NO |
NSString 路徑操作方法:
函式 | 說明 |
NSString * NSFullUserName (void) | 回傳目前使用者的完整名稱 |
NSString * NSHomeDirectory (void) | 回傳目前使用者家目錄的路徑 |
NSString * NSHomeDirectoryForUser (NSString* userName) | 回傳使用者 userName 家目錄的路徑 |
NSString * NSTemporaryDirectory (void) | 回傳目前使用者暫存目錄的路徑 |
方法 | 說明 |
+(NSString *) pathWithComponents: (NSArray *) components | 以 components 陣列為初始數值,初始為檔案路徑格式 |
-(NSArray *) pathComponents | 回傳依字串路徑切分的字串陣列 |
-(NSString *) lastPathComponent | 取得字串路徑最後一個檔案或目錄名稱 |
-(NSString *) pathExtension | 取得字串路徑的延伸檔名 |
-(NSString *) stringByAppendingPathComponent: (NSString *) aString | 在字串尾端附加檔案或目錄名稱 |
-(NSString *) stringByAppendingPathExtension: (NSString *) ext | 在字串尾端附加檔案的延伸檔名 |
-(NSString *) stringByDeletingLastPathComponent | 刪除字串路徑最後一個檔案或目錄的名稱 |
-(NSString *) stringByDeletingPathExtension | 刪除字串路徑的延伸檔名 |
-(NSString *) stringByExpandingTildeInPath | 將字串路徑中的 ~ (目前使用者家目錄) 與 ~user (指定使用者家目錄) 展開為完整路徑 |
-(NSString *) stringByStandardizingPath | 將字串路徑標準化,展開 ~ 、 ~user,去除 //、 ./ 、 / 、.. |
////////////////////////////////////////////////////////////////
//
// 名稱 : NSFileManager
//
// 用途 : NSFileManager 使用練習
//
// 作者 : 飛翔丸子
//
// 時間 : 2011/10/6
//
////////////////////////////////////////////////////////////////
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
// 建立 NSFileManager 物件
NSFileManager* fmanager = [[NSFileManager alloc] init];
// 取得目前系統的暫存目錄路徑
NSString* tempDirPath = NSTemporaryDirectory();
NSLog(@"目前系統的暫存目錄路徑為 : %@", tempDirPath);
// 在暫存目錄路徑後面附加將要新建的檔案名稱
NSString* newFile = [tempDirPath stringByAppendingPathComponent: @"newFile"];
NSLog(@"新建檔案的路徑與檔名 : %@", newFile);
// 依照盪案路徑與名稱實際建立檔案
if ([fmanager fileExistsAtPath:newFile] == YES) {
NSLog(@"檔案已存在");
}else {
[fmanager createFileAtPath: newFile contents:nil attributes: nil];
}
// 取得新建檔案的屬性
NSDictionary* attr = [fmanager attributesOfItemAtPath:newFile error:NULL];
NSLog(@"新建檔案的屬性 :");
for(NSString* tempAttr in attr){
NSLog(@"%@ - %@",tempAttr,[attr objectForKey: tempAttr]);
}
// 移除檔案
NSLog(@"移除新建檔案");
[fmanager removeItemAtPath:newFile error:NULL];
// 建立指定目錄
NSString* dirPath = [fmanager currentDirectoryPath];
NSString* createPath = [dirPath stringByAppendingPathComponent:@"newDirectory"];
NSString* movePath = [dirPath stringByAppendingPathComponent:@"moveDirectory"];
NSString* path;
BOOL isDir;
[fmanager createDirectoryAtPath:createPath withIntermediateDirectories:YES attributes:nil error:NULL];
[fmanager moveItemAtPath:createPath toPath:movePath error:NULL];
NSLog(@"目前 fmanager 路徑:%@",dirPath);
// 取得路徑中所有目錄與檔案
NSLog(@"印出路徑中所有內容:");
NSDirectoryEnumerator* dirEnum = [fmanager enumeratorAtPath: dirPath];
while ((path = [dirEnum nextObject]) != nil) {
[fmanager fileExistsAtPath:path isDirectory: &isDir];
NSLog(@"%@名稱為%@",(isDir == YES)? @"目錄": @"檔案",path);
}
[fmanager removeItemAtPath:movePath error:NULL];
[pool drain];
return 0;
}