【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 ...
随机推荐
- 关于OC中直接打印结构体(CGRectCGSize、CGPoint、UIOffset)等数据类型
关于OC直接打印结构体,点(CGRect,CGSize,CGPoint,UIOffset)等数据类型,我们完全可以把其转换为OC对象来进项打印调试,而不必对结构体中的成员变量进行打印.就好比我们可以使 ...
- TypeScript 学习笔记(二)
块级作用域变量: 1.不能在被声明前读或写 console.log(num); let num: number = 0; // 报错 2.仍然可以在一个拥有块级作用域的变量声明前通过函数捕获它,但不能 ...
- 『010』NoSQL
『010』索引-Database NoSQL [001]- 点我快速打开文章[01-Redis 简单介绍] 更新中
- RSA 登陆加密与解密
最近公司项目验收后,客户请来的信息安全技术人员对我们的网站进行了各种安全测试与排查问题,其中就有一个登陆时的加密问题.本来如果只是单纯的加密,可以直接在前台用MD5加密,将加密的值添加到数据库即可.但 ...
- unity_animator_stop_replay(重新播放)
对于一个Animation重复播放,但在隐藏后,再次显示播放会出现有些属性未复原 问题描述 特效同事给的Animation中更改了物体的很多属性,如Active,Alpha, Scale,Positi ...
- Python str & repr
Python str & repr repr 更多是用来配合 eval 的 (<- 点击查看),str 更多是用来转换成字符串格式的 str() & repr() str() 和 ...
- Python tempfile (临时文件)
Python tempfile 大量临时数据放在内存中会占用大量资源,可以使用临时文件来进行储存 临时文件不用命名,且使用后会被自动删除 TemporaryFile 使用 TemporaryFile ...
- ASP.NET开发实战——(九)ASP.NET MVC 与数据库之ORM
之前的文章中介绍了如何在ASP.NET中通过ADO.NET操作SQL Server和My SQL数据库,数据库的操作是通过SQL语句的执行来完成的,在ASP.NET中还有一个简便的方式来使用数据库,那 ...
- 可能会搞砸你的面试:你知道一个TCP连接上能发起多少个HTTP请求吗?
本文由原作者松若章原创发布,作者主页:zhihu.com/people/hrsonion/posts,感谢原作者的无私分享. 1.引言 一道经典的面试题是:从 URL 在浏览器被被输入到页面展现的过程 ...
- MongoDB创建数据库和删除数据库05-14学习笔记
MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写,是一个基于分布式文件存储的开源数据库系统.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关 ...