轉自 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的-(NSArray *)contentsOfDirectoryAtPath:(NSString *)path error:(NSError **)error
和- (NSArray *)subpathsAtPath:(NSString *)path
都可用來獲取指定目錄下的子項(文件或文件夾)列表,在獲取子項列表時他們都會忽略目錄'.'和'..',所獲取的子項列表順序不是固定的(兩次一樣的操做所返回的子項列表順序可能不一樣)。
它門的區別是:前者以非遞歸的方式獲取子項列表,然後者以遞歸的方式獲取子項列表。