【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提取文件属性里面的文件大小。

时间: 2024-12-30 00:41:37

【OC学习-25】实例:一次复制小文件和分次复制大文件——巩固文件的操作方法的相关文章

【OC学习-33】谓词介绍和小案例,其实相当于一个筛选过滤器的作用

谓词,呃,其实是一个NSPredicate对象,你可以设置一些条件给这个对象,那么这个对象就相当于一个过滤器了,满足它条件的和不满足的如何如何,是一个过滤作用. (1)创建一个对象,有name和age两个实例变量,然后利用for语句创建10个对象到一个数组中,最后创建一个谓词,过滤一下,把年龄小于25的那个对象的名字输出. //Person.h #import <Foundation/Foundation.h> @interface Person : NSObject @property(no

SQL语句学习手册实例版

SQL语句学习手册实例版 表操作 例1  对于表的教学管理数据库中的表 STUDENTS ,可以定义如下: CREATE  TABLE  STUDENTS (SNO      NUMERIC (6, 0) NOT NULL SNAME    CHAR (8) NOT NULL AGE      NUMERIC(3,0) SEX      CHAR(2) BPLACE  CHAR(20) PRIMARY KEY(SNO)) 例2  对于表的教学管理数据库中的表 ENROLLS ,可以定义如下: C

(转载)OC学习篇之---类的定义

之前已经介绍了OC中的一个程序HelloWorld,今天我们继续学习OC中类的相关知识. OC和C的最大区别就是具有了面向对象的功能,那么说到面向对象,就不得不说类这个概念了,如果学过Java的话,那么对类和对象的概念就不陌生了,因为Java是非常纯正的面向对象设计语言.关于类和对象的概念,这里就不仔细介绍了,网上有各种解释.我们之间来开一下OC中如何定义一个类,如何实例化出一个对象等. 首先我们新建一个工程,系统会自动创建main.m文件的,这时候,我们右键项目,选择New File.. 然后

OC学习总结之面向对象和类

OC学习总结之面向对象和类 Objective-c是c语言的母集合,它的原意就是在原始的c语言的主体上加入面向对象的特性.1.面向对象和面向过程  面向对象和面向过程是编程的两种思考方式.面向对象,简称OOP,它是以事物为中心,参与事件的事物是核心,完成事件只是事物的一个小任务.面向过程,简称OPP,它是以事件为中心,事件是核心,列出了完成事件的每一个步骤,一步一步完成.也就是面向对象侧重于从问题在寻找客体.客体的作用.客体间的关系即“谁”.“做什么”.“怎么做”,面向过程侧重于问题的分解即“事

(转载)OC学习篇之---单例模式

在之前的一片文章中介绍了对象的拷贝相关知识,今天我们来看一下OC中的单例模式,单例模式在设计模式中用的可能是最多的一种了,而且也是最简单的一种 实现单例模式有三个条件 1.类的构造方法是私有的 2.类提供一个类方法用于产生对象 3.类中有一个私有的自己对象 针对于这三个条件,OC中都是可以做到的 1.类的构造方法是私有的 我们只需要重写allocWithZone方法,让初始化操作只执行一次 2.类提供一个类方法产生对象 这个可以直接定义一个类方法 3.类中有一个私有的自己对象 我们可以在.m文件

OC学习15——文件I/O体系

OC提供了丰富的I/O相关API,如果只是管理文件和目录,程序可以使用NSFileManager进行管理,包括创建.删除.移动和复制文件等:如果程序需要读取文件内容,则可通过NSFileHandle进行处理:如果需要读取网络资源,则可通过NSURL进行处理:如果程序只是读取项目内部资源,则可借助MSBundle进行处理. 1.Foundation提供了NSData和NSMutableData,他们代表OC的数据缓冲区.NSData的作用有两个:将数据读入NSData:输出NSData的数据. 1

oc学习笔记-语法学习总结

1.定义类:@interface 类名 : 父类@end 2.使用:(冒号)表示继承一个类Student : NSObject 3.使用()定义一个Catagory(类别) * 作用:在不改变原有类结构的基础上,扩展原有类的方法(不能扩展属性),但不建议重载原有类的方法 * 开发工具默认生成的文件为:类名+Catagory名称 * Catagory可以写在单独的文件中,也可以写在原有类的文件中,如何写根据需求来决定. 4.使用<>表示实现一个Protocol(协议),如需实现多个协议,将协议名

OC学习篇之---总结和学习目录

今天终于把OC的基础知识学习完了,但是这些知识只是最基础的,还有很多高级知识,这个可能需要后面慢慢的去学习才能体会到.下面就是这次学习OC的目录教程,如果大家发现有什么不正确的地方,请指正,小弟是新生,多请OC老鸟来喷~~ 1.OC学习篇之---概述 2.OC学习篇之---第一个程序HelloWorld 3.OC学习篇之---类的定义 4.OC学习篇之---类的初始化方法和点语法的使用 5.OC学习篇之---类的三大特性(封装,继承,多态) 6.OC学习篇之[email protected]关键

OC学习篇之---单例模式

在之前的一片文章中介绍了对象的拷贝相关知识:http://blog.csdn.net/jiangwei0910410003/article/details/41926531,今天我们来看一下OC中的单例模式,单例模式在设计模式中用的可能是最多的一种了,而且也是最简单的一种 实现单例模式有三个条件 1.类的构造方法是私有的 2.类提供一个类方法用于产生对象 3.类中有一个私有的自己对象 针对于这三个条件,OC中都是可以做到的 1.类的构造方法是私有的 我们只需要重写allocWithZone方法,