IOS中大文件拷贝算法

 1 + (void)copyFileFromPath:(NSString *)fromPath toPath:(NSString *)toPath

 2 {

 3     //每次读取数据大小

 4     #define READ_SIZE 10

 5     // 获取文件管理器

 6     NSFileManager *fm = [NSFileManager defaultManager];

 7     

 8     // 创建目标文件,用于存储从源文件读取的NSData数据

 9     

10     BOOL isSuccess = [fm createFileAtPath:toPath contents:nil attributes:nil];

11     

12     if (!isSuccess) {

13         NSLog(@"创建目标文件失败!");

14         return;

15     }

16     // 获取源文件大小

17     NSDictionary *dic = [fm attributesOfItemAtPath:fromPath error:nil];

18     NSNumber *file_size = [dic objectForKey:@"NSFileSize"];

19     NSNumber *hadReadSize = @0;

20     double leftSize = [file_size doubleValue] - [hadReadSize doubleValue];

21     // 创建源文件和目标文件的句柄

22     NSFileHandle *sh = [NSFileHandle fileHandleForReadingAtPath:fromPath];

23     NSFileHandle *dh = [NSFileHandle fileHandleForWritingAtPath:toPath];

24     NSData *tempData = nil;

25     while (leftSize > 0) {

26         if (leftSize < READ_SIZE) {

27             tempData = [sh readDataToEndOfFile];

28             [dh writeData:tempData];

29             break;

30         }

31         else

32         {

33             tempData = [sh readDataOfLength:READ_SIZE];

34             [dh writeData:tempData];

35             leftSize -= READ_SIZE;

36         }

37         

38     }

39     

40 }

 

你可能感兴趣的:(ios)