oc 文件管理NSFileManager,文件讀寫NSFileHandle 文件復制

pwmd 10年前發布 | 3K 次閱讀 Objective-C IOS

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 ;

}


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 == ? totalSize/per :totalSize/per +1;

  

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

        [readHandleseekToFileOffset:per * i];

       NSData * data = [readHandle readDataOfLength:per];

        [writeHandleseekToEndOfFile];

        [writeHandle writeData:data];

        

    }

    // 關閉文件

    [writeHandlecloseFile];

    [readHandlecloseFile];

}

@end

 本文由用戶 pwmd 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!