【IPHONE开发-OBJECTC入门学习】文件的操作,读写复制文件
转自: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
- #import <Foundation/Foundation.h>
- #import "FileTools.h"
- int main(int argc, const char * argv[])
- {
- @autoreleasepool {
- NSNumber* size = [FileTools fileLengthWithFile:@"/Users/3g2win/Downloads/ios_development.cer"];
- NSLog(@"文件大小:%d",[size intValue]);
- [FileTools copyFileWithSrcFile:@"/Users/3g2win/Downloads/ios_development.cer" withBakFile:@"/Users/3g2win/Downloads/ios_development_备份.cer"];
- }
- return 0;
- }
【IPHONE开发-OBJECTC入门学习】文件的操作,读写复制文件的更多相关文章
- 【IPHONE开发-OBJECTC入门学习】对象的归档和解归档
转自:http://blog.csdn.net/java886o/article/details/9046967 #import <Foundation/Foundation.h> #im ...
- 【IPHONE开发-OBJECTC入门学习】复制对象,深浅复制
转自:http://blog.csdn.net/java886o/article/details/9046273 #import <Foundation/Foundation.h> int ...
- python入门学习:3.操作列表
python入门学习:3.操作列表 关键点:列表 3.1 遍历整个列表3.2 创建数值列表3.3 使用列表3.4 元组 3.1 遍历整个列表 循环这种概念很重要,因为它是计算机自动完成重复工作的常 ...
- 开发环境入门 linux基础 (部分) 复制 用户和组操作 权限更改
复制 用户和组操作 权限更改 CP 复制命令 cp 源文件 目标文件 a) –r(recursive,递归的):递归地复制目录.当复制一个目录时,复制该目录中所有的内容,其中包括子目录的全部内容. b ...
- PHP 文件夹操作「复制、删除、查看大小」迭代实现
"既然递归能很好的解决,为什么还要用迭代呢"?主要的原因还是效率问题-- 递归的概念是函数调用自身,把一个复杂的问题分解成与其相似的多个子问题来解决,可以极大的减少代码量,使得程序 ...
- PHP 文件夹操作「复制、删除、查看大小」递归实现
PHP虽然提供了 filesize.copy.unlink 等文件操作的函数,但是没有提供 dirsize.copydir.rmdirs 等文件夹操作的函数(rmdir也只能删除空目录).所以只能手动 ...
- Java文件File操作一:文件的创建和删除
一.简述 File 文件类,主要对文件进行相关操作.常用的File操作有:文件(夹)的创建.文件(夹)的删除,文件的读入和下载(复制)等: 二.文件(夹)的创建和删除 1.创建过程 实例: //cre ...
- 文件lseek操作产生空洞文件的方法
在文件操作过程中,lseek操作可以偏移到文件的任意位置. 在UNIX文件操作中,文件位移量可以大于文件的当前长度,在这种情况下,对该文件的下一次写将延长该文件,并在文件中构成一个空洞,这一点是允许的 ...
- day08文件操作的三步骤,基础的读,基础的写,with...open语法,文件的操作模式,文件的操作编码问题,文件的复制,游标操作
复习 ''' 类型转换 1.数字类型:int() | bool() | float() 2.str与int:int('10') | int('-10') | int('0') | float('-.5 ...
随机推荐
- 一文解读5G (转)
今天要研究的对象,是5G接入网. 什么是接入网?相信不少同学,对这个概念一定不会陌生. 搬出这张移动通信架构图: 接入网,在我们无线通信里,一般指无线接入网,也就是通常所说的RAN(Radio Acc ...
- emacs require和provide
Emacs的默认配置文件是.emacs,Emacs启动时会读取并执行.emacs中的LISP代码,用户使用.emacs达到自己的Emacs初始化配置目的. 不过单独使用.emacs有一个问题,因为时间 ...
- requests---requests发送xml数据类型
上一篇简单的介绍了post常见的4种数据类型,今天我们一起学习通过requests发送xml数据类型 xml数据类型 下方数据为xml数据,我们就通过这段数据学习如果通过requests发送xml数据 ...
- C学习笔记(3)---作用域,数组, (少量指针入门)
1. 作用域(scope):任何一种编程中,作用域是程序中定义的变量所存在的区域,超过该区域变量就不能被访问.C 语言中有三个地方可以声明变量. a. 在函数或块内部的局部变量 - 在某个函数或块的内 ...
- Kettle 执行SQL脚本
以下操作都在5.0.1版本下进行开发,其余版本可以进行自动比对 本文将对Kettle5中常用步骤字段选择(又名选择/改名值,英文原名:Select Values)进行详细解释.这个步骤的功能非常强大, ...
- jqs实现图片轮播--通过点击按钮来实现
<!-- 布局思路:一个大的div,中有一个ul.和一个箭头的div css样似描述: 整个盒子距离顶部100px,又水平居中 盒子的宽高为图片的实际宽高 由于每次都是看见了一张图片:有两种方式 ...
- JSP中 JSTL和EL标签的使用
使用JSTL前的准备 想要使用JSTL,首先需要给工程导入JSTL的包(JSTL.jar和standard.jar). JSTL简介 JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应 ...
- table表格属性
- Appium 定位
使用过 Appium 的都知道,元素的定位方式有很多种,具体使用哪一种,主要看业务的需要和自己的使用爱好.下面总结一下,Appium 到底有哪些定位方式,定位的元素以下面截图指定的元素为例子: 这 ...
- GitHub 注册失败的原因 以及解决 。
1.注册的时候老是卡在第一步: 提交用户名和密码 还有邮箱的时候 提交成功后. 不跳出 第二步.若现在去登录账号和密码,不管输对的还是输错的都是显示错误的.2.查看GitHub官网帮助后,不难发现问题 ...