NSFileManager&NSFileHandle
`
NSString *sourcePath = [[NSBundle mainBundle] pathForResource:@"source" ofType:@"pdf"];
//创建用于写入的目标文件
NSString *targetPath = [self.documentsPath stringByAppendingPathComponent:@"target.pdf"];
BOOL success = [[NSFileManager defaultManager] createFileAtPath:targetPath contents:nil attributes:nil];
if (success) {
NSLog(@"目标空PDF文件创建成功");
}else{
NSLog(@"目标空PDF文件创建失败");
}
NSFileHandle *sourceHandle = [NSFileHandle fileHandleForReadingAtPath:sourcePath];
NSFileHandle *targetHandle = [NSFileHandle fileHandleForWritingAtPath:targetPath];
//通过while循环,每次写入一部分数据,知道全部写入完成
BOOL notEND = YES;
//存储当前已经读取的数量
NSInteger readSize = 0;
//每次读入的字节大小
NSInteger sizePerTime = 5000;
//获取文件总长度
NSDictionary *attr = [[NSFileManager defaultManager] attributesOfItemAtPath:sourcePath error:nil];
NSLog(@"attr:%@",attr);
NSNumber *sizeNumber = [attr objectForKey:NSFileSize];
NSInteger fileToltalNum = sizeNumber.integerValue;
//记录循环的次数,表示读取了源文件多少次
int count = 0;
while (notEND) {
NSInteger leftSize = fileToltalNum - readSize;
NSData *data = https://www.it610.com/article/nil;
//如果剩下的超过5000,则读5000,如果剩下的少于5000,则读到结尾if (leftSize>= sizePerTime) {
data = [sourceHandle readDataOfLength:sizePerTime];
//读完5000以后修改已读的数量
readSize += sizePerTime;
//移动读取源文件的指针到新的位置
[sourceHandle seekToFileOffset:readSize];
}else{
//把剩余数据读出来
data = [sourceHandle readDataToEndOfFile];
//把还没读完设置为NO;
notEND = NO;
}
//把data写入目标文件
[targetHandle writeData:data];
//读写次数加1
count +=1;
}[sourceHandle closeFile];
[targetHandle closeFile];
NSLog(@"总共读了%d次",count);
【NSFileManager&NSFileHandle】`
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 宋仲基&宋慧乔(我们不公布恋情,我们直接结婚。)
- 21天|21天|M&M《见识》04
- 二叉树路径节点关键值和等于目标值(LeetCode--112&LeetCode--113)
- 2021—3—8日教练实践总结&呼吸练习&觉察日记
- 奇迹-妖妈|奇迹-妖妈 感恩日记46/365&非暴力沟通第3天
- 前端|web前端dya07--ES6高级语法的转化&render&vue与webpack&export
- 数据技术|一文了解Gauss数据库(开发历程、OLTP&OLAP特点、行式&列式存储,及与Oracle和AWS对比)
- Python|Win10下 Python开发环境搭建(PyCharm + Anaconda) && 环境变量配置 && 常用工具安装配置
- gem|gem & pod 记录