【IPHONE开发-OBJECTC入门学习】文件的操作,读写复制文件

来源:互联网 发布:软件成本 标准 编辑:程序博客网 时间:2024/04/29 14:57


FileTools.h


#import <Foundation/Foundation.h>//文件工具类@interface FileTools : NSObject//复制文件+ (void) copyFileWithSrcFile:(NSString*) srcFilePath withBakFile:(NSString*) bakFilePath;//获取文件的大小+ (NSNumber*) fileLengthWithFile:(NSString*) filePath;@end

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;}