oc 文件管理NSFileManager,文件读写NSFileHandle ,设计一个文件管理类将一个文件复制到另一个文件,由于文件过大要求每次复制100长度,通过NSFileHandle 来操作,并

设计一个文件管理类将一个文件复制到另一个文件,由于文件过大要求每次复制100长度,通过NSFileHandle来操作,并通过代理模式打印出当前的赋值进度百分比

main.m

#import <Foundation/Foundation.h>

#import "FileMaker.h"

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

@autoreleasepool {

NSString * fromPath = [NSHomeDirectory()stringByAppendingPathComponent:@"desktop/name.txt"];

NSString * toPath = [NSHomeDirectory()stringByAppendingPathComponent:@"desktop/usa.txt"];

FileMaker * fileMaker = [[FileMakeralloc]init];

[fileMaker copyFileFromPath:fromPath
toPath:toPath];

}

return
0;

}

FileMaker.m

#import "FileMaker.h"

@implementation FileMaker

设计一个文件管理类将一个文件复制到另一个文件,由于文件过大要求每次复制100长度,通过NSFileHandle来操作,并通过代理模式打印出当前的赋值进度百分比

- (void)copyFileFromPath:(NSString *)fromPath toPath:(NSString
*)toPath{

// 1.1创建文件管理类

NSFileManager * manager = [NSFileManagerdefaultManager];

// 1.2通过键获取值(字符串)并转换为int类型,这样不用通过读数据就获取了文件的长度

//
通过文件管对象方法attributesOfItemAtPath:fromPath error:nil获得文件的一个字典

NSDictionary * dict = [manager
attributesOfItemAtPath:fromPath
error:nil];//此方法其中提供了文件容量的键值对

int totalSize = [[dict
valueForKey:@"NSFileSize" ]
intValue];

//1.3创建目标文件(在没有的情况下,若果不确定加判断是否存在,存在不创建,不存在创建)

[manager createFileAtPath:toPathcontents:nilattributes:nil];

NSLog(@"%@",dict);

// 2.
分别创建读、写管理者

NSFileHandle * readHandle = [NSFileHandlefileHandleForReadingAtPath:fromPath];

NSFileHandle * writeHandle = [NSFileHandlefileHandleForWritingAtPath:toPath];

设计一个文件管理类将一个文件复制到另一个文件,由于文件过大要求每次复制100长度,通过NSFileHandle来操作,并通过代理模式打印出当前的赋值进度百分比

// 3.循环读取源文件,并且写入目标文件

int per =
100;

int times = totalSize%100 ==0 ? totalSize/per :totalSize/per
+1;

for (int i =0; i < times ; i++) {

[readHandleseekToFileOffset:per * i];

NSData * data = [readHandle
readDataOfLength:per];

[writeHandleseekToEndOfFile];

[writeHandle writeData:data];

}

//
关闭文件

[writeHandlecloseFile];

[readHandlecloseFile];

}

@end

时间: 2024-10-15 03:52:22

oc 文件管理NSFileManager,文件读写NSFileHandle ,设计一个文件管理类将一个文件复制到另一个文件,由于文件过大要求每次复制100长度,通过NSFileHandle 来操作,并的相关文章

编写一个圆类Circle,该类拥有: ①一个成员变量 Radius(私有,浮点型); // 存放圆的半径; ②两个构造方法 Circle( ) // 将半径设为0 Circle(double r ) //创建Circle对象时将半径初始化为r

package Circle;import java.util.Scanner;public class Circle { private double Radius; public double getRadius() { return Radius; } public void setRadius(double r) { this.Radius=r; } public Circle()//无参构造方法 { this.Radius=0;//初始化为0 System.out.println("圆

[js高手之路]node js系列课程-创建简易web服务器与文件读写

web服务器至少有以下几个特点: 1.24小时不停止的工作,也就是说这个进程要常驻在内存中 2.24小时在某一端口监听,如: http://localhost:8080, www服务器默认端口80 3.要能够处理基本的请求:如get, post 在node js中创建一台服务器非常的简单,因为node自带http模块,该模块可以帮助我们非常快速搭建一台web服务器,来处理一个简单的请求. 1 const http = require("http"); 2 var server = ht

3,C语言文件读写

这两天看到一个关于文件读写的题目,索性就把相关内容总结下. C语言文件读写,无非是几个读写函数的应用,fopen(),fread(),fwrite()等,下面简单介绍下. 一.fopen() 函数原型:FILE *fopen(const char *path, const char *mode); 参数说明:path,所打开的文件名(包含文件路径,缺省值为当前工程目录):mode:流形态,后文详述. 返回值:文件指针.打开失败,返回NULL;打开成功,返回指向该流的文件指针. mode详解:mo

紫猫插件-文件读写(1-13)

QM[zm]05.01 文件读写之读取乱码文件(VIP) 小知识:了解下base64编码(功能就目前而言只是让内容无法直接读取 还有一个常用用处是可以把图片的二进制流base64编码 把图片作为字符串来传输 实际上稍微懂一点这方面的知识的很容易看到真实的内容) 举个例子 比如迅雷下载地址 我们把第一行的字符串进行base64解码 得到的结果是 很明显 迅雷对下载地址进行了保护 算法无非就是 给真正的下载地址左侧加AA右侧加ZZ 然后整体bse64加密 得到了我们看到的迅雷下载地址 顺便说一下 我

数据清洗文件操作--csv txt文件读写、excel文件读写、数据库文件读写

数据清洗之文件操作 这是一个关于淘宝母婴产品的用户消费行为的数据集,然后基于这个数据集,做数据清洗 csv文件读写 In [ ]: import pandas as pd import numpy as np import os In [ ]: # 更改文件路劲 os.chdir('F:\CSDN\课程内容\代码和数据') In [ ]: #设置最大显示列数 pd.set_option('display.max_columns', 20) #设置最大显示行数 pd.set_option('dis

Linux Direct 文件读写(文件DIO)

有时候,读写文件并不想要使用系统缓存(page cache),此时 direct 文件读写就派上了用场,使用方法: (1)打开文件时,添加O_DIRECT参数: 需要定义_GNU_SOURCE,否则找不到O_DIRECT宏定义 示例片段: #define _GNU_SOURCE #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int fd = open("test.out"

小结在一个java源文件当中可以有多个类,但是为什么只能有一个public类呢?而当这个类被修饰为public的话,为什么源文件名必须要与类名相同呢?

Java编程思想中的一段话: 当编写一个java源代码文件时,此文件通常被称为编译单元(有时也被称为转译单元).每个编译单元都必须有一个后缀名.java,而在编译单元内则可以有一个public类,该类的名称必须与文件的名称相同(包括大小写,但不包括文件的后缀名.java).每个编译单元只能有一个public类,否则编译器就不会接受.如果在该编译单元之中还有额外的类的话,那么在包之外的世界是无法看见这些类的,这是因为它们不是public类,而且它们主要用来为主public类提供支持. 理解: 每编

浅谈为什么一个java源文件中只能有一个public类?

声明,本篇文章为转载 转载 http://blog.csdn.net/bareheadzzq/article/details/6562211 最近在一个java文件中实现了几个类,其中一个声明为public类型,但编译器报错:后来将public去掉,也即文件中没有一个public类,程序正常运行,有些困惑,最后通过本文章找到答案,为以后方便查找,转载,感谢作者. 结论: 一个Java源文件中最多只能有一个public类,当有一个public类时,源文件名必 须与之一致,否则无法编译,如果源文件中

《Java虚拟机原理图解》1.3、class文件中的访问标志、类索引、父类索引、接口索引集合

讲完了class文件中的常量池,我们就相当于克服了class文件中最麻烦的模块了.现在,我们来看一下class文件中紧接着常量池后面的几个东西:访问标志.类索引.父类索引.接口索引集合. 1. 访问标志.类索引.父类索引.接口索引集合 在class文件中的位置 好,让我们来一一击破它们,看看它们到底是什么东西. 2. 访问标志(access_flags)能够表示什么? 访问标志(access_flags)紧接着常量池后,占有两个字节,总共16位,如下图所示: 当JVM在编译某个类或者接口的源代码