Objective-C 目錄與檔案操作

Objective-C 目錄與檔案操作


  • 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,去除 //、 ./ 、 / 、..


?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
////////////////////////////////////////////////////////////////
//
// 名稱 : 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;
}

留言

熱門文章