转自:http://blog.csdn.net/java886o/article/details/9041547

FileTools.h

FileTools.m

#import "FileTools.h"

@implementation FileTools

//复制文件
+ (void) copyFileWithSrcFile:(NSString*) srcFilePath withBakFile:(NSString*) bakFilePath {
//1.利用NSFileManager复制文件
//NSFileManager* manager = [NSFileManager defaultManager];
//[manager copyItemAtPath:srcFilePath toPath:bakFilePath error:nil]; //2.利用读原文件,写新文件复制文件
NSFileManager* fileManager = [NSFileManager defaultManager]; //创建新文件
BOOL createResult = [fileManager createFileAtPath:bakFilePath contents:nil attributes:nil];
if (createResult) {
NSLog(@"文件创建成功...");
}else {
NSLog(@"文件创建失败...");
return;
} NSFileHandle* inStream = [NSFileHandle fileHandleForReadingAtPath:srcFilePath]; //特别注意-----必须先创建文件再创建outStream,否则将出现拷贝文件大小为0的问题 NSFileHandle* outStream = [NSFileHandle fileHandleForWritingAtPath:bakFilePath]; //初始化变量
NSInteger readCount = 0;
NSInteger fileSize = [[self fileLengthWithFile:srcFilePath] intValue]; NSLog(@"复制的文件大小为:%ld",fileSize); BOOL isCanRead = YES;
NSData* bufferData = nil; while(isCanRead) { //如果可以读文件,则开始读文件
[inStream seekToFileOffset:readCount];
if ((fileSize - readCount) < (1024 * 8)) { //如果剩下可读的文件小于8K,则直接读取到文件末尾,并保存文件,然后结束读取文件
bufferData = [inStream readDataToEndOfFile];
isCanRead = false;
[outStream writeData:bufferData];
break;
}else { //如果剩余的刻度文件大于等于8K,则跳转到已读文件位置,并读取8K的数据,保存文件,然后继续读取
bufferData = [inStream readDataOfLength:(1024 * 8)];
readCount+= (1024 * 8);
[outStream writeData:bufferData]; }
} [outStream closeFile];
[inStream closeFile]; NSLog(@"文件拷贝完成...");
} //获取文件大小
+ (NSNumber*) fileLengthWithFile:(NSString*) filePath {
NSFileManager* manager = [NSFileManager defaultManager];
NSDictionary* attrs = [manager attributesOfItemAtPath:filePath error:nil];
return [attrs objectForKey:NSFileSize];
} @end

测试 main.m

      1. #import <Foundation/Foundation.h>
      2. #import "FileTools.h"
      3. int main(int argc, const char * argv[])
      4. {
      5. @autoreleasepool {
      6. NSNumber* size = [FileTools fileLengthWithFile:@"/Users/3g2win/Downloads/ios_development.cer"];
      7. NSLog(@"文件大小:%d",[size intValue]);
      8. [FileTools copyFileWithSrcFile:@"/Users/3g2win/Downloads/ios_development.cer" withBakFile:@"/Users/3g2win/Downloads/ios_development_备份.cer"];
      9. }
      10. return 0;
      11. }

最新文章

  1. iOS-自动布局Autolayout(原创)
  2. Python 线程、进程和协程
  3. 【JAVA IO流之字符流】
  4. Grunt 新手指南
  5. Got a packet bigger than &#39;max_allowed_packet&#39; bytes
  6. 微信公开课(北京站)速记 微信、微信支付、O2O的定义与关联
  7. OpenStack:安装Nova
  8. linux命令之端口占用
  9. SQL Server类型与C#类型对应关系
  10. 转载文章:Windows Azure 七月份更新:SQL 数据库、流量管理器、自动伸缩、虚拟机
  11. fpga之显示字符串
  12. bat文件逐行读取txt
  13. shell常用脚本
  14. Filecoin挖矿进展
  15. [Swift]LeetCode916.单词子集 | Word Subsets
  16. BZOJ1124 POI2008枪战Maf(环套树+贪心)
  17. Linux系统CentOS 7配置Spring Boot运行环境
  18. SpringMVC绑定到实体数组、list、set、和map时要注意
  19. ORACLE: private ,dao中util执行规范,nextval计数把通过nextval插入但已删除的列也统计在内向后计数
  20. 2017 国庆湖南 Day4

热门文章

  1. 剑指offer 16:反转链表
  2. Linux中IP配置
  3. python的几个实例程序员节日快乐
  4. Python—序列化和反序列化模块(json、pickle和shelve)
  5. [日常] 安装windows+deepin双系统
  6. 批量bat脚本复制文件或文件夹
  7. 爬虫scrapy模块
  8. is ==的区别 编码和解码
  9. day45_9_4前端(2)css
  10. [C5] Andrew Ng - Structuring Machine Learning Projects