iOS文件拷贝实现
来源:互联网 发布:表白网站制作软件 编辑:程序博客网 时间:2024/06/06 06:46
//拷贝小文件- (IBAction)copyNormalFile:(id)sender { //需求:/Documents/source.txt -> 拷贝到/Docuements/target.txt //1.两个文件所在的路径 NSString *sourcePath = [self.documentsPath stringByAppendingPathComponent:@"source.txt"]; NSString *targetPath = [self.documentsPath stringByAppendingPathComponent:@"target.txt"]; //2.创建两个空的文件 NSString *sourceContent = @"源文件的测试内容。。。"; [[NSFileManager defaultManager] createFileAtPath:sourcePath contents:[sourceContent dataUsingEncoding:NSUTF8StringEncoding] attributes:nil]; [[NSFileManager defaultManager] createFileAtPath:targetPath contents:nil attributes:nil]; //3.使用NSFileHandle写入source.txt内容 //3.1 创建NSFileHandle对象,指定哪个文件,并且指定目的(读或者写) NSFileHandle *sourceHandle = [NSFileHandle fileHandleForReadingAtPath:sourcePath]; NSFileHandle *targetHandle = [NSFileHandle fileHandleForWritingAtPath:targetPath]; //4.读取source.txt所有数据 NSData *readData = [sourceHandle readDataToEndOfFile]; //5.在写入target.txt [targetHandle writeData:readData]; //测试:在给定要写入的数据 NSString *writeContent = @"新写入的数据"; NSData *writeDataAgain = [writeContent dataUsingEncoding:NSUTF8StringEncoding]; [targetHandle writeData:writeDataAgain];}//拷贝大文件- (IBAction)copyBigFile:(id)sender { //准备:把大的文件的放在/Documents/source.pdf //需求:大的source.pdf的内容分批地拷贝到target.pdf //1.获取两个文件的路径 NSString *sourcePath = [self.documentsPath stringByAppendingPathComponent:@"source.pdf"]; NSString *targetPath = [self.documentsPath stringByAppendingPathComponent:@"target2.pdf"]; //2.创建空的target.pdf文件 [[NSFileManager defaultManager] createFileAtPath:targetPath contents:nil attributes:nil]; //3.创建两个NSFileHandle对象 NSFileHandle *sourceHandle = [NSFileHandle fileHandleForReadingAtPath:sourcePath]; NSFileHandle *targetHandle = [NSFileHandle fileHandleForWritingAtPath:targetPath]; //4.while循环分批拷贝 //设定每次从源文件读取5000bytes int dataSizePerTimes = 5000;// //源文件的总大小(方式一)// NSDictionary *sourceFileDic = [[NSFileManager defaultManager] attributesOfItemAtPath:sourcePath error:nil];// NSLog(@"源文件pdf的属性字典:%@", sourceFileDic);// //单位:bytes// NSNumber *fileSize = [sourceFileDic objectForKey:NSFileSize];// int fileTotalSize = [fileSize intValue]; /*源文件的总大小(方式二) 坑:如下的方法会把源文件handle对象直接指向最后 */ unsigned long long fileTotalSize = [sourceHandle seekToEndOfFile]; //把挪动到最后的文件指针挪到最前面(相对于文件的开头的偏移量offset) [sourceHandle seekToFileOffset:0]; //已经读取源文件的总大小 int readFileSize = 0; //while循环 while (1) { //计算剩余没有读取的数据的大小 int leftSize = fileTotalSize - readFileSize; //情况一:剩余不足5000bytes if (leftSize < dataSizePerTimes) { //直接读取剩下的所有数据 NSData *leftData = [sourceHandle readDataToEndOfFile]; //写入目标文件 [targetHandle writeData:leftData]; //跳出循环 break; } else { //情况二:每次读取5000bytes NSData *data = [sourceHandle readDataOfLength:dataSizePerTimes]; //写入目标文件 [targetHandle writeData:data]; //更新已经读取的数据大小 readFileSize += dataSizePerTimes; } } //收尾工作(关闭指向) [sourceHandle closeFile]; [targetHandle closeFile];}
0 0
- iOS文件拷贝实现
- iOS 实现文件的拷贝
- iOS 文件拷贝
- java实现文件拷贝
- 多线程实现文件拷贝
- IO实现文件拷贝
- 文件拷贝的实现
- 自己实现文件拷贝
- Java实现文件拷贝
- java实现文件拷贝
- 多线程实现文件拷贝
- gava实现文件拷贝
- 如何实现文件的拷贝
- 利用C# 实现文件拷贝
- 文件差异拷贝实现部署
- C#实现大文件拷贝
- 文件拷贝(汇编实现)
- 文件拷贝功能的实现
- spring的annotation
- memcache基本使用
- XPP3-一个非常快的XML解析器
- 事件分发机制原理
- 找不到 constraint-layout:1.0.0-alpha3
- iOS文件拷贝实现
- Network Link Conditioner模拟不同网络环境
- Java中的内存堆栈
- git入门命令笔记
- ECCV2016 部分文章
- Linux chmod命令详解
- net::ERR_FILE_NOT_FOUND
- 在ubuntu16.04上使用Eclipse调试基于caffe的测试代码
- 在Linux/centos下查看网卡型号,如何查看主板型号,CPU/显卡信息,硬盘型号等硬件信息