Objective-C文件和目錄操做,IOS文件操做,NSFileManager使用文件操做

轉自 http://blog.csdn.net/swingpyzf/article/details/15185767objective-c

 

objective-c經過使用NSFileManager類來管理和操做文件、目錄,NSFileManager,文件或目錄是使用文件的路徑名的惟一標示。每一個路徑名都是一個NSString對象。測試

NSFileManager對象經過defaultManager方法來建立實例
列如:
spa

NSFileManager *fm = [NSFileManager defaultManager];
.net


刪除某個文件
[fm removeItemAtPath:@"filename" error:NULL];
指針

error:參數是一個指向NSError對象的指針,可以提供錯誤的信息。若是指定爲NULL的話就會使用默認的行爲,返回值是BOOL類型的方法,操做成功返回YES反之返回NO對象


判斷文件是否被刪除
if([fm removeItemAtPath:@"filename" error:NULL]==NO){
NSLog(@"文件刪除失敗");
return 1;
}
blog


NSFileManager經常使用的文件方法:

-(NSData*)contentsAtPath:path 從一個文件中讀取數據

-(BOLL)createFileAtPath:path contents:(NSData*)data attributes: attr 向一個文件寫入數據

-(BOOL)removeItemAtPath:path error:err 刪除一個文件

-(BOOL)moveItemAtPath:from toPath:to error:err 重命名或移動一個文件(to 不能是已存在的)

-(BOOL)copyItemAtPath:from toPath:to error:err 複製文件(to 不能是已存在的)

-(BOOL)contentsEqualAtPath:path1 andPath:path2 比較這兩個文件的內容

-(BOOL)fileExistsAtPath:path 測試文件是否存在

-(BOOL)isReadableFileAtPath:path 測試文件是否存在,而且是否能執行讀操做

-(BOOL)isWritableFileAtPath:path 測試文件是否存在,而且是否能執行寫操做

-(NSDictionary*)attributesOfItemAtPath:path error:err 獲取文件的屬性
遞歸

屬性字典容許你指定要建立的文件的權限,若是將該參數指定爲nil,該文件會被設置爲默認權限。
ip


一、經過一段程序來對文件進行操做:ci

 

//  

//  main.m  

//  NSFileManager_01  

//  

//  Created by swinglife on 13-11-10.  

//  Copyright (c) 2013年 swinglife. All rights reserved.  

//  

#import <Foundation/Foundation.h>  

int main(int argc, const char * argv[])  

{  

    @autoreleasepool {  

//文件名  

        NSString *fileName = @"testFile";  

        NSString *fileContent = @"這是文件內容!!!!";  

        NSData *fileData = [fileContent dataUsingEncoding:NSUTF8StringEncoding];  

//建立NSFileManager實例  

        NSFileManager *fm = [NSFileManager defaultManager];  

//建立文件  

        [fm createFileAtPath:fileName contents:fileData attributes:nil];  

//判斷文件是否存在 不存在就結束程序  

if([fm fileExistsAtPath:fileName]==NO){  

            NSLog(@"文件不存在");  

return 1;  

        }  

//拷貝文件  

if([fm copyItemAtPath:fileName toPath:@"newFile" error:NULL]==NO){  

            NSLog(@"複製失敗");  

return 2;  

        }  

//測試兩個文件是否相同  

if([fm contentsEqualAtPath:fileName andPath:@"newFile"]==NO){  

            NSLog(@"文件不相同");  

return 3;  

        }  

//重命名newFile  

        [fm moveItemAtPath:@"newFile" toPath:@"newFile2" error:NULL];  

//獲取newFile2的大小  

        NSDictionary *fileAttr = [fm attributesOfItemAtPath:@"newFile2" error:NULL];  

if(fileAttr!=nil){  

            NSLog(@"文件大小:%llu bytes",[[fileAttr objectForKey:NSFileSize] unsignedLongLongValue]);  

        }  

//刪除文件  

        [fm removeItemAtPath:fileName error:NULL];  

//顯示newFile2的內容  

        NSString *data = [NSString stringWithContentsOfFile:@"newFile2" encoding:NSUTF8StringEncoding error:NULL];  

        NSLog(@"%@",data);  

    }  

return 0;  

}  


NSFileManager經常使用的目錄方法


-(NSString*)currentDirectoryPath 獲取當前目錄

-(BOOL)changeCurrentDirectoryPath:path 更改當前目錄

-(BOOL)copyItemAtPath:from toPath:to error:err 複製目錄結構

-(BOOL)createDirectoryAtPath:path withIntermediateDirectories:(BOOL)flag attributes:attr 建立一個新目錄

-(BOOL)fileExistsAtPath:path isDirectory:(BOOL*)flag 測試文件是否是目錄(flag中存儲結果)

-(NSArray*)contentsOfDirectoryAtPath:path error:err 列出目錄內容

-(NSDirectoryEnumerator*)enumeratorAtPath:path 枚舉目錄的內容

-(BOOL)removeItemAtPath:path error:err 刪除空目錄

-(BOOL)moveItemAtPath:from toPath:to error:err 重命名或移動一個目錄


二、經過一段程序來對目錄進行操做:

 

//  

//  main.m  

//  NSFileManager_02  

//  

//  Created by swinglife on 13-11-10.  

//  Copyright (c) 2013年 swinglife. All rights reserved.  

//  

#import <Foundation/Foundation.h>  

int main(int argc, const char * argv[])  

{  

    @autoreleasepool {  

//文件目錄  

        NSString *dirName = @"testDir";  

//建立NSFileManager實例  

        NSFileManager *fm = [NSFileManager defaultManager];  

//獲取當前目錄  

        NSString *path = [fm currentDirectoryPath];  

        NSLog(@"Path:%@",path);  

//建立新目錄  

        [fm createDirectoryAtPath:dirName withIntermediateDirectories:YES attributes:nil error:NULL];  

//重命名新的目錄  

        [fm moveItemAtPath:dirName toPath:@"newDir" error:NULL];  

//更改當前目錄到新的目錄  

        [fm changeCurrentDirectoryPath:@"newDir"];  

//獲取當前工做目錄  

        path = [fm currentDirectoryPath];  

        NSLog(@"Path:%@",path);  

    }  

return 0;  

}  

 

NSFileManager的subpathsAtPath:和contentsOfDirectoryAtPath:error:的相同點和區別

NSFileManager的-(NSArray *)contentsOfDirectoryAtPath:(NSString *)path error:(NSError **)error

 

- (NSArray *)subpathsAtPath:(NSString *)path

都可用來獲取指定目錄下的子項(文件或文件夾)列表,在獲取子項列表時他們都會忽略目錄'.'和'..',所獲取的子項列表順序不是固定的(兩次一樣的操做所返回的子項列表順序可能不一樣)。

它門的區別是:前者以非遞歸的方式獲取子項列表,然後者以遞歸的方式獲取子項列表。

相關文章
相關標籤/搜索