oc 文件管理NSFileManager,文件讀寫NSFileHandle 文件復制
oc 文件管理NSFileManager,文件讀寫NSFileHandle ,設計一個文件管理類將一個文件復制到另一個文件,由于文件過大要求每次復制100長度,通過NSFileHandle 來操作
設計一個文件管理類將一個文件復制到另一個文件,由于文件過大要求每次復制100長度,通過NSFileHandle來操作,main.m
#import <Foundation/Foundation.h>
#import "FileMaker.h"
int main(int argc,const char * argv[]) {
@autoreleasepool {
NSString * fromPath = [NSHomeDirectory()stringByAppendingPathComponent:@"desktop/name.txt"];
NSString * toPath = [NSHomeDirectory()stringByAppendingPathComponent:@"desktop/usa.txt"];
FileMaker * fileMaker = [[FileMakeralloc]init];
[fileMaker copyFileFromPath:fromPath toPath:toPath];
}
return ;
}
FileMaker.m
#import "FileMaker.h"
@implementation FileMaker
設計一個文件管理類將一個文件復制到另一個文件,由于文件過大要求每次復制100長度,通過NSFileHandle來操作,并通過代理模式打印出當前的賦值進度百分比
- (void)copyFileFromPath:(NSString *)fromPath toPath:(NSString *)toPath{
// 1.1創建文件管理類
NSFileManager * manager = [NSFileManagerdefaultManager];
// 1.2通過鍵獲取值(字符串)并轉換為int類型,這樣不用通過讀數據就獲取了文件的長度
// 通過文件管對象方法attributesOfItemAtPath:fromPath error:nil獲得文件的一個字典
NSDictionary * dict = [manager attributesOfItemAtPath:fromPath error:nil];//此方法其中提供了文件容量的鍵值對
int totalSize = [[dict valueForKey:@"NSFileSize" ] intValue];
//1.3創建目標文件(在沒有的情況下,若果不確定加判斷是否存在,存在不創建,不存在創建)
[manager createFileAtPath:toPathcontents:nilattributes:nil];
NSLog(@"%@",dict);
// 2. 分別創建讀、寫管理者
NSFileHandle * readHandle = [NSFileHandlefileHandleForReadingAtPath:fromPath];
NSFileHandle * writeHandle = [NSFileHandlefileHandleForWritingAtPath:toPath];
設計一個文件管理類將一個文件復制到另一個文件,由于文件過大要求每次復制100長度,通過NSFileHandle來操作,并通過代理模式打印出當前的賦值進度百分比
// 3.循環讀取源文件,并且寫入目標文件
int per = 100;
int times = totalSize%100 == ? totalSize/per :totalSize/per +1;
for (int i =; i < times ; i++) {
[readHandleseekToFileOffset:per * i];
NSData * data = [readHandle readDataOfLength:per];
[writeHandleseekToEndOfFile];
[writeHandle writeData:data];
}
// 關閉文件
[writeHandlecloseFile];
[readHandlecloseFile];
}
@end