首页 > 代码库 > 【OC学习-25】实例:一次复制小文件和分次复制大文件——巩固文件的操作方法
【OC学习-25】实例:一次复制小文件和分次复制大文件——巩固文件的操作方法
(1)复制一个小文件,可以一次性把从源文件里读取出来的数据全都写入到目标文件中,这样就完成复制
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //创建一个源文件路径和目标文件路径 NSString *homePath=NSHomeDirectory(); NSString *oriFilePath=[homePath stringByAppendingPathComponent:@"economist-20140830.pdf"]; NSString *finFilePath=[homePath stringByAppendingPathComponent:@"economist-copy.pdf"]; //利用fileManager去创建目标文件(源文件已有不必创建) NSFileManager *fileManager=[NSFileManager defaultManager]; [fileManager createFileAtPath:finFilePath contents:nil attributes:nil]; //打开源文件和目标文件 NSFileHandle *oriFile=[NSFileHandle fileHandleForReadingAtPath:oriFilePath]; NSFileHandle *finFile=[NSFileHandle fileHandleForWritingAtPath:finFilePath]; //把源文件一次性读取出来的数据写入到目标文件中 [finFile writeData:[oriFile readDataToEndOfFile]]; //关闭文件 [oriFile closeFile]; [finFile closeFile]; } return 0; }
结果:
(2)分次复制大文件,每次复制500字节,用到循环每次读取500,并用到判断如果末尾一次不足500字节则全部读取
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //创建一个源文件路径和目标文件路径 NSString *homePath=NSHomeDirectory(); NSString *oriFilePath=[homePath stringByAppendingPathComponent:@"economist-20140830.pdf"]; NSString *finFilePath=[homePath stringByAppendingPathComponent:@"economist-hello.pdf"]; //利用fileManager去创建目标文件(源文件已有不必创建) NSFileManager *fileManager=[NSFileManager defaultManager]; [fileManager createFileAtPath:finFilePath contents:nil attributes:nil]; //打开源文件和目标文件 NSFileHandle *oriFile=[NSFileHandle fileHandleForReadingAtPath:oriFilePath]; NSFileHandle *finFile=[NSFileHandle fileHandleForWritingAtPath:finFilePath]; //获取源文件大小,利用fileManager先获取文件属性,然后提取属性里面的文件大小,属性是一个字典,然后再把文件大小转化成整形 NSDictionary *oriAttr=[fileManager attributesOfItemAtPath:oriFilePath error:nil]; NSNumber *fileSize0=[oriAttr objectForKey:NSFileSize]; NSInteger fileSize=[fileSize0 longValue]; //先设定已读文件大小为0,和一个while判断值 NSInteger fileReadSize=0; BOOL isEnd=YES; while (isEnd) { NSInteger sublength=fileSize-fileReadSize;//判断还有多少未读 NSData *data=nil;//先设定个空数据 if (sublength<500) { //如果未读的数据少于500字节那么全都读取出来,并结束while循环 isEnd=NO; data=[oriFile readDataToEndOfFile]; }else{ data=[oriFile readDataOfLength:500];//如果未读的大于500字节,那么读取500字节 fileReadSize+=500;//把已读的加上500字节 [oriFile seekToFileOffset:fileReadSize];//把光标定位在已读的末尾 } [finFile writeData:data];//把以上存在data中得数据写入到目标文件中 } //关闭文件 [oriFile closeFile]; [finFile closeFile]; } return 0; }
结果:
总结:
a:fileManager功能强大,可以很自如地操作文件;
b:利用fileManager和FileHandle来操作文件更得心应手,注意两者的优势,比如读取文件大小,可以利用fileHandle的一个操作方法把数据都提取出来测量数据大小,但对于大文件相当于把文件都读取一遍,不可取。所以可以用fileManager提取文件属性里面的文件大小。
【OC学习-25】实例:一次复制小文件和分次复制大文件——巩固文件的操作方法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。