【IPHONE开发-OBJECTC入门学习】文件的操作,读写复制文件
2024-09-08 08:58:07
转自: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;
- }
最新文章
- iOS-自动布局Autolayout(原创)
- Python 线程、进程和协程
- 【JAVA IO流之字符流】
- Grunt 新手指南
- Got a packet bigger than &#39;max_allowed_packet&#39; bytes
- 微信公开课(北京站)速记 微信、微信支付、O2O的定义与关联
- OpenStack:安装Nova
- linux命令之端口占用
- SQL Server类型与C#类型对应关系
- 转载文章:Windows Azure 七月份更新:SQL 数据库、流量管理器、自动伸缩、虚拟机
- fpga之显示字符串
- bat文件逐行读取txt
- shell常用脚本
- Filecoin挖矿进展
- [Swift]LeetCode916.单词子集 | Word Subsets
- BZOJ1124 POI2008枪战Maf(环套树+贪心)
- Linux系统CentOS 7配置Spring Boot运行环境
- SpringMVC绑定到实体数组、list、set、和map时要注意
- ORACLE: private ,dao中util执行规范,nextval计数把通过nextval插入但已删除的列也统计在内向后计数
- 2017 国庆湖南 Day4