读取和写入 文件 (NSFIleManger 与 NSFileHandle)

时间:2023-03-08 17:42:27
读取和写入 文件 (NSFIleManger 与 NSFileHandle)

读取和写入 文件

//传递文件路径方法

-(id)initPath:(NSString *)srcPath targetPath:(NSString *)targetPath

{

self = [super init];

if (self != nil) {

_srcPath = [srcPath copy];

_targetPath = [targetPath copy];

}

return self;

}

//开始读文件

-(void)startRead

{

NSFileManager *fileManager = [NSFileManager defaultManager];

//创建文件

BOOL success = [fileManager createFileAtPath:_srcPath contents:nil attributes:NULL];

if (success) {

NSLog(@"文件创建成功!!!");

}

//读取文件

NSFileHandle  *inFilehandle = [NSFileHandle fileHandleForReadingAtPath:_srcPath];

//写入目标文件

NSFileHandle  *outFileHandle = [NSFileHandle fileHandleForWritingAtPath:_targetPath];

//利用文件的属性获取文件的大小,现获取文件的属性,然后通过关键 键 获取文件的大小,在转化为基本数据类型

NSDictionary *dic = [fileManager attributesOfItemAtPath:_srcPath error:nil];

NSNumber *fileNum = [dic objectForKey:NSFileSize];

self.fileSize = [fileNum longLongValue];

BOOL isEnd = YES;

NSAutoreleasePool *pool = nil;

int n = 0;

while (isEnd) {

if (n % 10 ==0) {

[pool release];

pool = [[NSAutoreleasePool alloc] init];

}

NSInteger subSize = self.fileSize - _alredyReadFileSize;

NSData *data;

if (subSize < 5000) {

isEnd = NO;

data = [inFilehandle readDataToEndOfFile];

}else{

data = [inFilehandle readDataOfLength:5000];

self.alredyReadFileSize += 5000;

[inFilehandle seekToFileOffset:_alredyReadFileSize];

}

[outFileHandle writeData:data];

n++;

}

[outFileHandle closeFile];

NSLog(@"复制文件成功");

}