当前位置: 首页 > news >正文

iOS 实现文件的拷贝

//

//  main.m

//  filecopy

//

//  Created by GuoYule on 15/2/19.

//  Copyright (c) 2015年 GuoYule. All rights reserved.

//

 

#import <Foundation/Foundation.h>

//实现文件的拷贝

#define SRCPATH @"/Users/guoyule/Desktop/emailreceipt_20150214R3887454299_new.pdf"

#define DSTPATH @"/Users/guoyule/Desktop/emailreceipt_20150214R3887454299_new1.pdf"

#define PERROR (error) if(error){NSLog(@"%@",error);exit(-1);}

#define BUFF 100

//缓冲区大小

int main(int argc, const char * argv[]) {

    @autoreleasepool {

 

        //所谓文件拷贝 就是从原文件里读往目的文件里写

        //首先创建文件

        NSFileManager * fm =[NSFileManager defaultManager];

        NSError * error = nil;

        //获取源文件的属性

        NSDictionary *attributes = [fm attributesOfItemAtPath:SRCPATHerror:&error];

//        PERROR(error);

        if(error){NSLog(@"%@",error);exit(-1);};

        //创建新文件

       BOOL ret = [fm createFileAtPath:DSTPATH contents:nil attributes:attributes];

        if (!ret) {

            perror("createFile");

            exit(-1);

        }

        //打开文件句柄

           NSFileHandle * srcFh = [NSFileHandlefileHandleForReadingAtPath:SRCPATH];

        NSFileHandle * dstFh = [NSFileHandle fileHandleForWritingAtPath:DSTPATH];

        //不要一口气就将源文件读入内存

        //首先要获取源文件大小

//        size_t size = [[attributes objectForKey:@"NSFileSize"] integerValue];

        unsigned long long size = [attributes fileSize];

        //这是一个方法,只有当字典中装文件属性才有效 实际上是一个类别

        /*

         @interface NSDictionary (NSFileAttributes)

         

         - (unsigned long long)fileSize;

         - (NSDate *)fileModificationDate;

         - (NSString *)fileType;

         - (NSUInteger)filePosixPermissions;

         - (NSString *)fileOwnerAccountName;

         - (NSString *)fileGroupOwnerAccountName;

         - (NSInteger)fileSystemNumber;

         - (NSUInteger)fileSystemFileNumber;

         - (BOOL)fileExtensionHidden;

         - (OSType)fileHFSCreatorCode;

         - (OSType)fileHFSTypeCode;

         - (BOOL)fileIsImmutable;

         - (BOOL)fileIsAppendOnly;

         - (NSDate *)fileCreationDate;

         - (NSNumber *)fileOwnerAccountID;

         - (NSNumber *)fileGroupOwnerAccountID;

         @end

 

         */

        while (size) {

            NSData * data =  nil;

            if (size <= BUFF) {

                data = [srcFh readDataToEndOfFile];

                size  = 0;

            }else{

                //先读100个字节

                data = [srcFh readDataOfLength:BUFF];

                size -= BUFF;

            }

            [dstFh writeData:data];

        }

    }

    return 0;

    }

 

转载于:https://www.cnblogs.com/LennyKwok/p/4338898.html

相关文章:

  • 如何实现.so共享库文件
  • 关于四则运算程序的测试
  • 软件工程师的属性与发展
  • MVC 外网 上传 下载 实现方式(一)
  • asp.net Ajax Post 请求一般处理程序
  • 我的博客开通了!
  • ASP.NET MVC3默认提供了11种ActionResult的实现
  • 实现GetHashCode时要遵循的规则
  • 贪心+模拟 Codeforces Round #288 (Div. 2) C. Anya and Ghosts
  • 用linqPad帮助你快速学习LINQ
  • Cacti监控Tomcatserver实现过程
  • C++ 多继承与虚基类
  • Set集合
  • Solr4.7从数据库导数据
  • 【转】 Key/Value之王Memcached初探:二、Memcached在.Net中的基本操作
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • SegmentFault for Android 3.0 发布
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 【mysql】环境安装、服务启动、密码设置
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 【刷算法】从上往下打印二叉树
  • android 一些 utils
  • angular组件开发
  • Apache的基本使用
  • axios 和 cookie 的那些事
  • Brief introduction of how to 'Call, Apply and Bind'
  • E-HPC支持多队列管理和自动伸缩
  • express如何解决request entity too large问题
  • flask接收请求并推入栈
  • mysql innodb 索引使用指南
  • node.js
  • Python3爬取英雄联盟英雄皮肤大图
  • Spring Cloud Feign的两种使用姿势
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • 测试如何在敏捷团队中工作?
  • 从0实现一个tiny react(三)生命周期
  • 记录:CentOS7.2配置LNMP环境记录
  • 前端面试题总结
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 使用API自动生成工具优化前端工作流
  • 移动端解决方案学习记录
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • (10)STL算法之搜索(二) 二分查找
  • (4.10~4.16)
  • (超详细)语音信号处理之特征提取
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (一)SpringBoot3---尚硅谷总结
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)Sql Server 保留几位小数的两种做法
  • (转载)hibernate缓存
  • (转载)Linux网络编程入门